feat(cart): implement restoration and reservation of source cart on expired checkout modification

This commit is contained in:
2026-08-21 10:10:28 -03:00
parent 0510c1aa12
commit 3a2dc8b7e0
4 changed files with 90 additions and 3 deletions

View File

@@ -448,6 +448,42 @@ class StorePurchaseTest extends TestCase
]);
}
public function test_it_restores_and_reserves_the_source_cart_when_an_expired_checkout_is_modified(): void
{
$this->createTenant('sonder', 'Sonder', 'sonder.com.ar');
$user = User::factory()->create();
$variant = $this->createVariantForTenant('sonder', 10, '50.00');
$purchase = $this->createCheckoutPurchase($user, 'sonder', $variant, 3);
$purchase->update(['expires_at' => now()->subMinute()]);
$this->artisan('reservations:expire')->assertSuccessful();
$this->assertDatabaseHas('compras', [
'id' => $purchase->id,
'status' => Purchase::STATUS_EXPIRED,
]);
$this->assertDatabaseHas('inventories', [
'id' => $variant->inventory_id,
'reserved_stock' => 0,
]);
$this->actingAs($user, 'sanctum')
->postJson("/api/tenants/sonder/compras/{$purchase->id}/cancel")
->assertOk()
->assertJsonPath('data.status', Purchase::STATUS_CANCELLED);
$this->assertDatabaseHas('carritos', [
'id' => $purchase->cart_id,
'user_id' => $user->id,
'status' => 'active',
'deleted_at' => null,
]);
$this->assertDatabaseHas('inventories', [
'id' => $variant->inventory_id,
'reserved_stock' => 3,
]);
}
public function test_it_merges_the_checkout_cart_when_the_user_created_another_active_cart(): void
{
$this->createTenant('sonder', 'Sonder', 'sonder.com.ar');