61 lines
2.6 KiB
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());
|
|
}
|
|
}
|