Files
shopit-back/tests/Unit/Catalog/VariantAvailabilityTest.php
ncoronel 47b2e8e030 Refactor entry reservation handling by generalizing ticket reservations
- Renamed `desfile_entry_reservations` to `entry_reservations` and `desfile_reservation_batches` to `reservation_batches`.
- Updated models, services, and requests to use the new `EntryReservation` model from the `Ticket` domain instead of the deleted `Desfile` model.
- Introduced a new `EntryReservationPaymentType` enum to manage payment types.
- Modified database migrations to ensure data integrity during the transition.
- Updated tests to reflect changes in the database schema and model relationships.
- Ensured that existing functionality remains intact while improving code organization and clarity.
2026-10-02 11:03:00 -03:00

61 lines
2.6 KiB
PHP

<?php
namespace Tests\Unit\Catalog;
use App\Domains\Commerce\Catalog\Enums\InventoryPolicy;
use App\Domains\Commerce\Catalog\Models\CatalogItem;
use App\Domains\Commerce\Catalog\Models\Inventory;
use App\Domains\Commerce\Catalog\Models\Variant;
use App\Domains\Ticketing\Ticket\Models\EntryReservation;
use Illuminate\Database\Eloquent\Collection;
use Tests\TestCase;
class VariantAvailabilityTest extends TestCase
{
public function test_administrative_reservations_are_excluded_even_for_unlimited_stock_and_cart_exceptions(): void
{
$reserved = new Variant;
$reserved->id = 1;
$reserved->setRelation('entryReservations', new Collection([new EntryReservation]));
$available = new Variant;
$available->id = 2;
$available->setRelation('entryReservations', new Collection);
$item = new CatalogItem(['inventory_policy' => InventoryPolicy::Unlimited]);
$item->setRelation('variants', new Collection([$reserved, $available]));
$this->assertSame([2], $item->visibleVariants()->modelKeys());
$this->assertSame([2], $item->visibleVariants(1)->modelKeys());
}
public function test_sale_closure_and_variant_status_apply_without_the_cart_exception(): void
{
$active = new Variant;
$active->id = 1;
$disabled = new Variant(['sales_disabled_at' => now()]);
$disabled->id = 2;
$replaced = new Variant(['replaced_by_variant_id' => 1]);
$replaced->id = 3;
$item = new CatalogItem(['inventory_policy' => InventoryPolicy::Unlimited]);
$item->setRelation('variants', new Collection([$active, $disabled, $replaced]));
$this->assertSame([1], $item->visibleVariants()->modelKeys());
$item->sales_end_at = now()->subMinute();
$this->assertSame([], $item->visibleVariants()->modelKeys());
$this->assertSame([1], $item->visibleVariants(1)->modelKeys());
}
public function test_only_the_cart_can_include_its_own_out_of_stock_variant(): void
{
$variant = new Variant;
$variant->id = 1;
$variant->setRelation('inventory', new Inventory(['real_stock' => 1, 'reserved_stock' => 1]));
$item = new CatalogItem(['inventory_policy' => InventoryPolicy::Tracked]);
$item->setRelation('variants', new Collection([$variant]));
$this->assertSame([], $item->visibleVariants()->modelKeys());
$this->assertSame([1], $item->visibleVariants(1)->modelKeys());
$item->inventory_policy = InventoryPolicy::Unlimited;
$this->assertSame([1], $item->visibleVariants()->modelKeys());
}
}