|
2 | 2 |
|
3 | 3 | declare(strict_types=1); |
4 | 4 |
|
| 5 | +use App\Models\Game\BlueprintData; |
5 | 6 | use App\Models\Game\Faction; |
| 7 | +use App\Models\Game\ItemData; |
6 | 8 | use App\Models\Game\Mission\Mission; |
7 | 9 | use App\Models\Game\Mission\MissionData; |
8 | 10 |
|
|
58 | 60 | ], |
59 | 61 | ]); |
60 | 62 |
|
| 63 | +describe('text filter values containing commas', function (): void { |
| 64 | + it('filters missions by title containing a comma', function (): void { |
| 65 | + MissionData::factory()->forVersion($this->version)->create(['title' => 'No Proof, No Problem']); |
| 66 | + MissionData::factory()->forVersion($this->version)->create(['title' => 'Stakeout']); |
| 67 | + |
| 68 | + $response = $this->getJson('/api/missions?filter[title]='.urlencode('No Proof, No Problem')); |
| 69 | + |
| 70 | + $response->assertSuccessful(); |
| 71 | + $titles = collect($response->json('data'))->pluck('title'); |
| 72 | + expect($titles)->toContain('No Proof, No Problem') |
| 73 | + ->and($titles)->not->toContain('Stakeout'); |
| 74 | + }); |
| 75 | + |
| 76 | + it('filters missions by description containing a comma', function (): void { |
| 77 | + MissionData::factory()->forVersion($this->version)->create([ |
| 78 | + 'title' => 'Delivery', |
| 79 | + 'description' => 'Pick up, put down, repeat.', |
| 80 | + ]); |
| 81 | + MissionData::factory()->forVersion($this->version)->create([ |
| 82 | + 'title' => 'Stakeout', |
| 83 | + 'description' => 'Watch the door.', |
| 84 | + ]); |
| 85 | + |
| 86 | + $response = $this->getJson('/api/missions?filter[description]='.urlencode('Pick up, put down')); |
| 87 | + |
| 88 | + $response->assertSuccessful(); |
| 89 | + $titles = collect($response->json('data'))->pluck('title'); |
| 90 | + expect($titles)->toContain('Delivery') |
| 91 | + ->and($titles)->not->toContain('Stakeout'); |
| 92 | + }); |
| 93 | + |
| 94 | + it('filters missions by blueprint name containing a comma', function (): void { |
| 95 | + $blueprintData = BlueprintData::factory()->create(['output_name' => 'MedPen, Box of']); |
| 96 | + $itemData = ItemData::factory()->for($this->version, 'gameVersion')->create(); |
| 97 | + $missionData = MissionData::factory()->forVersion($this->version)->create(['title' => 'Crafts MedPens']); |
| 98 | + $missionData->blueprints()->attach($blueprintData->id, [ |
| 99 | + 'pool_uuid' => fake()->uuid(), |
| 100 | + 'item_data_id' => $itemData->id, |
| 101 | + 'chance' => 1.0, |
| 102 | + ]); |
| 103 | + MissionData::factory()->forVersion($this->version)->create(['title' => 'Unrelated']); |
| 104 | + |
| 105 | + $response = $this->getJson('/api/missions?filter[blueprint_name]='.urlencode('MedPen, Box of')); |
| 106 | + |
| 107 | + $response->assertSuccessful(); |
| 108 | + $titles = collect($response->json('data'))->pluck('title'); |
| 109 | + expect($titles)->toContain('Crafts MedPens') |
| 110 | + ->and($titles)->not->toContain('Unrelated'); |
| 111 | + }); |
| 112 | + |
| 113 | + it('searches with the query filter containing a comma', function (): void { |
| 114 | + MissionData::factory()->forVersion($this->version)->create(['title' => 'No Proof, No Problem']); |
| 115 | + MissionData::factory()->forVersion($this->version)->create(['title' => 'Stakeout']); |
| 116 | + |
| 117 | + $response = $this->getJson('/api/missions?filter[query]='.urlencode('No Proof, No Problem')); |
| 118 | + |
| 119 | + $response->assertSuccessful(); |
| 120 | + $titles = collect($response->json('data'))->pluck('title'); |
| 121 | + expect($titles)->toContain('No Proof, No Problem') |
| 122 | + ->and($titles)->not->toContain('Stakeout'); |
| 123 | + }); |
| 124 | +}); |
| 125 | + |
61 | 126 | it('returns filters using star_systems data and accepts system suffix input', function (): void { |
62 | 127 | $stantonFaction = Faction::factory()->create(['name' => 'Stanton Contractors']); |
63 | 128 | $pyroFaction = Faction::factory()->create(['name' => 'Pyro Contractors']); |
|
0 commit comments