test: cover event variant replacements

This commit is contained in:
2026-09-14 14:11:24 -03:00
parent 2bd3bf9dc1
commit b4a7b80430
2 changed files with 144 additions and 0 deletions

View File

@@ -72,6 +72,79 @@ class StorePurchaseTest extends TestCase
$this->travelBack();
}
public function test_checkout_replaces_a_historical_cart_variant_without_duplicating_stock(): void
{
$tenant = $this->createTenant('sonder', 'Sonder', 'sonder.com.ar');
$user = User::factory()->create();
$historicalVariant = $this->createVariantForTenant('sonder', 10, '50.00');
$cart = Cart::query()->create([
'tenant_codigo' => $tenant->codigo,
'user_id' => $user->id,
'status' => Cart::STATUS_ACTIVE,
]);
$cart->addItem($historicalVariant->catalog_item_id, $historicalVariant->id, 2);
$replacement = Variant::query()->create([
'catalog_item_id' => $historicalVariant->catalog_item_id,
'inventory_id' => $historicalVariant->inventory_id,
'precio' => '50.00',
]);
$historicalVariant->update([
'replaced_by_variant_id' => $replacement->id,
'sales_disabled_at' => now(),
]);
$purchase = app(CheckoutService::class)->startCheckout($tenant, $user->id, [
'cart_id' => $cart->id,
]);
$this->assertDatabaseHas('carrito_items', [
'cart_id' => $cart->id,
'variant_id' => $replacement->id,
'cantidad' => 2,
]);
$this->assertDatabaseHas('compra_items', [
'compra_id' => $purchase->id,
'source_variant_id' => $replacement->id,
'cantidad' => 2,
]);
$this->assertDatabaseHas('inventories', [
'id' => $historicalVariant->inventory_id,
'real_stock' => 10,
'reserved_stock' => 2,
]);
$this->assertSame(8, $historicalVariant->catalogItem->fresh()->availableStock());
}
public function test_direct_checkout_rejects_a_historical_variant(): void
{
$tenant = $this->createTenant('sonder', 'Sonder', 'sonder.com.ar');
$user = User::factory()->create();
$historicalVariant = $this->createVariantForTenant('sonder', 10, '50.00');
$replacement = Variant::query()->create([
'catalog_item_id' => $historicalVariant->catalog_item_id,
'inventory_id' => $historicalVariant->inventory_id,
'precio' => '50.00',
]);
$historicalVariant->update([
'replaced_by_variant_id' => $replacement->id,
'sales_disabled_at' => now(),
]);
$this->actingAs($user, 'sanctum')
->postJson('/api/tenants/sonder/compras/start-checkout', [
'direct_items' => [[
'catalog_item_id' => $historicalVariant->catalog_item_id,
'variant_id' => $historicalVariant->id,
'cantidad' => 1,
]],
])
->assertUnprocessable()
->assertJsonValidationErrors('direct_items.0.variant_id');
$this->assertDatabaseCount('compras', 0);
}
public function test_checkout_cannot_replace_an_overdue_cart_reservation(): void
{
$tenant = $this->createTenant('sonder', 'Sonder', 'sonder.com.ar');