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()); } }