|
9 | 9 | use PHPUnit\Framework\Attributes\Test; |
10 | 10 | use Statamic\Facades\Collection; |
11 | 11 | use Statamic\Facades\Entry; |
| 12 | +use Statamic\Facades\User; |
12 | 13 | use Statamic\Testing\Concerns\PreventsSavingStacheItemsToDisk; |
13 | 14 | use Tests\TestCase; |
14 | 15 |
|
@@ -198,6 +199,88 @@ public function it_throws_validation_error_when_customer_email_is_invalid() |
198 | 199 | $this->assertNull($cart->fresh()->customer()); |
199 | 200 | } |
200 | 201 |
|
| 202 | + #[Test] |
| 203 | + public function it_assigns_logged_in_user_to_cart_by_default() |
| 204 | + { |
| 205 | + config()->set('statamic.cargo.carts.always_checkout_as_guest', false); |
| 206 | + |
| 207 | + $cart = $this->makeCart(); |
| 208 | + $cart->customer(null)->save(); |
| 209 | + |
| 210 | + $user = User::make()->email('user@example.com')->save(); |
| 211 | + |
| 212 | + $this->actingAs($user) |
| 213 | + ->from('/cart') |
| 214 | + ->patch('/!/cargo/cart', [ |
| 215 | + 'customer' => [ |
| 216 | + 'name' => 'John Doe', |
| 217 | + 'email' => 'john@example.com', |
| 218 | + ], |
| 219 | + ]) |
| 220 | + ->assertRedirect('/cart'); |
| 221 | + |
| 222 | + $cart = $cart->fresh(); |
| 223 | + |
| 224 | + $this->assertNotInstanceOf(GuestCustomer::class, $cart->customer()); |
| 225 | + $this->assertEquals($user->id(), $cart->customer()->id()); |
| 226 | + } |
| 227 | + |
| 228 | + #[Test] |
| 229 | + public function it_creates_guest_customer_when_always_checkout_as_guest_is_enabled() |
| 230 | + { |
| 231 | + config()->set('statamic.cargo.carts.always_checkout_as_guest', true); |
| 232 | + |
| 233 | + $cart = $this->makeCart(); |
| 234 | + $cart->customer(null)->save(); |
| 235 | + |
| 236 | + $user = User::make()->email('user@example.com')->save(); |
| 237 | + |
| 238 | + $this->actingAs($user) |
| 239 | + ->from('/cart') |
| 240 | + ->patch('/!/cargo/cart', [ |
| 241 | + 'customer' => [ |
| 242 | + 'name' => 'John Doe', |
| 243 | + 'email' => 'john@example.com', |
| 244 | + ], |
| 245 | + ]) |
| 246 | + ->assertRedirect('/cart'); |
| 247 | + |
| 248 | + $cart = $cart->fresh(); |
| 249 | + |
| 250 | + $this->assertInstanceOf(GuestCustomer::class, $cart->customer()); |
| 251 | + $this->assertEquals('John Doe', $cart->customer()->name()); |
| 252 | + $this->assertEquals('john@example.com', $cart->customer()->email()); |
| 253 | + } |
| 254 | + |
| 255 | + #[Test] |
| 256 | + public function it_does_not_update_user_data_when_always_checkout_as_guest_is_enabled() |
| 257 | + { |
| 258 | + config()->set('statamic.cargo.carts.always_checkout_as_guest', true); |
| 259 | + |
| 260 | + $cart = $this->makeCart(); |
| 261 | + $cart->customer(null)->save(); |
| 262 | + |
| 263 | + $user = User::make() |
| 264 | + ->email('original@example.com') |
| 265 | + ->set('name', 'Original Name') |
| 266 | + ->save(); |
| 267 | + |
| 268 | + $this->actingAs($user) |
| 269 | + ->from('/cart') |
| 270 | + ->patch('/!/cargo/cart', [ |
| 271 | + 'customer' => [ |
| 272 | + 'name' => 'New Name', |
| 273 | + 'email' => 'new@example.com', |
| 274 | + ], |
| 275 | + ]) |
| 276 | + ->assertRedirect('/cart'); |
| 277 | + |
| 278 | + $user = User::find($user->id()); |
| 279 | + |
| 280 | + $this->assertEquals('original@example.com', $user->email()); |
| 281 | + $this->assertEquals('Original Name', $user->get('name')); |
| 282 | + } |
| 283 | + |
201 | 284 | #[Test] |
202 | 285 | public function it_deletes_the_cart() |
203 | 286 | { |
|
0 commit comments