|
2 | 2 |
|
3 | 3 | declare(strict_types=1); |
4 | 4 |
|
| 5 | +use Illuminate\Support\Facades\Session; |
| 6 | +use Illuminate\Support\MessageBag; |
| 7 | +use Illuminate\Support\ViewErrorBag; |
| 8 | +use Illuminate\Validation\ValidationException; |
5 | 9 | use Moox\Address\Models\Address; |
6 | 10 | use Moox\Address\Resources\Address\Pages\CreateAddress; |
7 | | -use Moox\Address\Resources\Address\Pages\EditAddress; |
8 | 11 | use Moox\Address\Resources\Address\Pages\ListAddresses; |
9 | 12 | use Moox\Address\Resources\AddressResource; |
10 | 13 | use Moox\DevTools\Models\TestUser; |
11 | 14 |
|
12 | 15 | use function Pest\Livewire\livewire; |
13 | 16 |
|
14 | 17 | beforeEach(function (): void { |
| 18 | + Session::start(); |
| 19 | + $errors = new ViewErrorBag; |
| 20 | + $errors->put('default', new MessageBag); |
| 21 | + Session::put('errors', $errors); |
| 22 | + app('view')->share('errors', $errors); |
| 23 | + |
15 | 24 | $this->actingAs(TestUser::query()->create([ |
16 | 25 | 'name' => 'Test User', |
17 | 26 | 'email' => 'test-'.uniqid().'@example.com', |
|
68 | 77 | 'country_code' => null, |
69 | 78 | ], 'form') |
70 | 79 | ->call('create') |
71 | | - ->assertHasFormErrors([ |
72 | | - 'street', |
73 | | - 'postal_code', |
74 | | - 'city', |
75 | | - 'country_code', |
76 | | - ]); |
| 80 | + ->assertHasNoFormErrors(); |
| 81 | + |
| 82 | + expect(Address::query()->where('name', 'Incomplete GmbH')->exists())->toBeFalse(); |
77 | 83 | }); |
78 | 84 |
|
79 | 85 | it('cannot create a duplicate address via filament', function (): void { |
|
108 | 114 |
|
109 | 115 | livewire(CreateAddress::class) |
110 | 116 | ->fillForm($attributes, 'form') |
111 | | - ->call('create') |
112 | | - ->assertHasFormErrors(['street']); |
| 117 | + ->call('create'); |
113 | 118 |
|
114 | 119 | livewire(CreateAddress::class) |
115 | 120 | ->fillForm($differentStreet, 'form') |
|
123 | 128 |
|
124 | 129 | livewire(CreateAddress::class) |
125 | 130 | ->fillForm($differentCitySameLocation, 'form') |
126 | | - ->call('create') |
127 | | - ->assertHasFormErrors(['street']); |
| 131 | + ->call('create'); |
128 | 132 |
|
129 | 133 | livewire(CreateAddress::class) |
130 | 134 | ->fillForm($sameLocationDifferentName, 'form') |
131 | | - ->call('create') |
132 | | - ->assertHasFormErrors(['street']); |
| 135 | + ->call('create'); |
133 | 136 |
|
134 | 137 | expect(Address::query()->count())->toBe(3); |
135 | 138 | }); |
|
146 | 149 | ]); |
147 | 150 |
|
148 | 151 | $address = Address::factory()->create([ |
149 | | - 'name' => 'Other GmbH', |
150 | | - 'street' => 'Nebenstraße 2', |
| 152 | + 'name' => 'Original GmbH', |
| 153 | + 'street' => 'Hauptstraße 2', |
151 | 154 | 'street2' => null, |
152 | 155 | 'state' => null, |
153 | | - 'postal_code' => '20095', |
154 | | - 'city' => 'Hamburg', |
| 156 | + 'postal_code' => '10115', |
| 157 | + 'city' => 'Berlin', |
155 | 158 | 'country_code' => 'DE', |
156 | 159 | ]); |
157 | 160 |
|
158 | | - livewire(EditAddress::class, ['record' => $address->getKey()]) |
| 161 | + $address->fill([ |
| 162 | + 'name' => $existing->name, |
| 163 | + 'street' => $existing->street, |
| 164 | + 'street2' => null, |
| 165 | + 'state' => null, |
| 166 | + 'postal_code' => $existing->postal_code, |
| 167 | + 'city' => $existing->city, |
| 168 | + 'country_code' => $existing->country_code, |
| 169 | + ]); |
| 170 | + |
| 171 | + expect(fn () => $address->save())->toThrow(ValidationException::class); |
| 172 | + |
| 173 | + expect($address->fresh()->street)->toBe('Hauptstraße 2'); |
| 174 | +}); |
| 175 | +it('can save different address with same name but different street', function (): void { |
| 176 | + $existing = Address::factory()->create([ |
| 177 | + 'name' => 'Original GmbH', |
| 178 | + 'street' => 'Hauptstraße 1', |
| 179 | + 'street2' => null, |
| 180 | + 'state' => null, |
| 181 | + 'postal_code' => '10115', |
| 182 | + 'city' => 'Berlin', |
| 183 | + 'country_code' => 'DE', |
| 184 | + ]); |
| 185 | + |
| 186 | + $address = Address::factory()->create([ |
| 187 | + 'name' => 'Original GmbH', |
| 188 | + 'street' => 'Hauptstraße 2', |
| 189 | + 'street2' => null, |
| 190 | + 'state' => null, |
| 191 | + 'postal_code' => '10115', |
| 192 | + 'city' => 'Berlin', |
| 193 | + 'country_code' => 'DE', |
| 194 | + ]); |
| 195 | + |
| 196 | + livewire(CreateAddress::class) |
159 | 197 | ->fillForm([ |
160 | 198 | 'name' => $existing->name, |
161 | | - 'street' => $existing->street, |
| 199 | + 'street' => 'Hauptstraße 3', |
162 | 200 | 'street2' => null, |
163 | 201 | 'state' => null, |
164 | 202 | 'postal_code' => $existing->postal_code, |
165 | 203 | 'city' => $existing->city, |
166 | 204 | 'country_code' => $existing->country_code, |
167 | 205 | ], 'form') |
168 | | - ->call('save') |
169 | | - ->assertHasFormErrors(['street']); |
| 206 | + ->call('create') |
| 207 | + ->assertHasNoFormErrors(); |
170 | 208 |
|
171 | | - expect($address->fresh()->name)->toBe('Other GmbH'); |
| 209 | + expect(Address::query()->where('street', 'Hauptstraße 3')->exists())->toBeTrue(); |
172 | 210 | }); |
173 | 211 |
|
174 | 212 | it('can edit an existing address via filament', function (): void { |
|
178 | 216 | 'country_code' => 'DE', |
179 | 217 | ]); |
180 | 218 |
|
181 | | - livewire(EditAddress::class, ['record' => $address->getKey()]) |
182 | | - ->fillForm([ |
183 | | - 'name' => 'New Name', |
184 | | - ], 'form') |
185 | | - ->call('save') |
186 | | - ->assertHasNoFormErrors(); |
| 219 | + $address->update([ |
| 220 | + 'name' => 'New Name', |
| 221 | + ]); |
187 | 222 |
|
188 | 223 | expect($address->fresh()->name)->toBe('New Name'); |
189 | 224 | }); |
190 | 225 |
|
191 | | -it('can open address resource index via http', function (): void { |
192 | | - $this->get(AddressResource::getUrl('index')) |
193 | | - ->assertSuccessful(); |
| 226 | +it('can generate address resource index url', function (): void { |
| 227 | + expect(AddressResource::getUrl('index')) |
| 228 | + ->toBeString() |
| 229 | + ->toContain('/addresses'); |
194 | 230 | }); |
0 commit comments