Files
shopit-back/tests/Unit/Catalog/VariantAvailabilityTest.php

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\Desfile\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('desfileEntryReservations', new Collection([new EntryReservation]));
$available = new Variant;
$available->id = 2;
$available->setRelation('desfileEntryReservations', 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());
}
}