feat(variants): implement inventory cloning for historical stock updates and adjust related tests

This commit is contained in:
2026-09-15 15:15:18 -03:00
parent ff43ba32f3
commit dcf4383fbf
5 changed files with 110 additions and 12 deletions

View File

@@ -8,6 +8,8 @@ use App\Domains\Auth\Models\User;
use App\Domains\Authorization\Enums\RoleCode;
use App\Domains\Catalog\Models\CatalogItem;
use App\Domains\Catalog\Models\Inventory;
use App\Domains\Catalog\Models\StockReservation;
use App\Domains\Catalog\Models\StockReservationLine;
use App\Domains\Catalog\Models\Variant;
use App\Domains\Event\Events\EventDateRescheduled;
use App\Domains\Event\Events\EventDateSuspended;
@@ -249,7 +251,17 @@ class AdminAppEventControllerTest extends TestCase
'time_end' => '20:00',
]);
$variant = $this->createVariant($tenant, $original->id);
$variant->inventory()->update(['real_stock' => 5]);
$variant->inventory()->update(['real_stock' => 5, 'reserved_stock' => 2]);
$reservation = StockReservation::query()->create([
'status' => StockReservation::STATUS_ACTIVE,
'expires_at' => now()->addHour(),
]);
$reservationLine = StockReservationLine::query()->create([
'stock_reservation_id' => $reservation->id,
'inventory_id' => $variant->inventory_id,
'quantity' => 2,
'tracks_inventory' => true,
]);
$ticket = $this->createTicket($tenant, $admin, $variant);
Sanctum::actingAs($admin);
@@ -283,7 +295,12 @@ class AdminAppEventControllerTest extends TestCase
$replacement = $variant->replacement()->firstOrFail();
$this->assertSame($original->id, $variant->event_date_id);
$this->assertSame($destination->id, $replacement->event_date_id);
$this->assertSame($variant->inventory_id, $replacement->inventory_id);
$this->assertNotSame($variant->inventory_id, $replacement->inventory_id);
$this->assertSame(5, $variant->inventory->fresh()->real_stock);
$this->assertSame(0, $variant->inventory->fresh()->reserved_stock);
$this->assertSame(5, $replacement->inventory->real_stock);
$this->assertSame(2, $replacement->inventory->reserved_stock);
$this->assertSame($replacement->inventory_id, $reservationLine->fresh()->inventory_id);
$this->assertNotNull($variant->sales_disabled_at);
$this->assertSame($replacement->id, $variant->replaced_by_variant_id);
$this->assertSame(
@@ -350,7 +367,8 @@ class AdminAppEventControllerTest extends TestCase
]);
$replacement->refresh();
$latestReplacement = $replacement->replacement()->firstOrFail();
$this->assertSame($replacement->inventory_id, $latestReplacement->inventory_id);
$this->assertNotSame($replacement->inventory_id, $latestReplacement->inventory_id);
$this->assertSame(5, $latestReplacement->inventory->real_stock);
$this->assertSame('2027-10-25', $latestReplacement->eventDate->date->format('Y-m-d'));
$this->assertFalse($replacement->isSellable());
$this->assertTrue($latestReplacement->isSellable());