test: cover event variant replacements
This commit is contained in:
@@ -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');
|
||||
|
||||
Reference in New Issue
Block a user