setRawAttributes([ 'type' => ValidityTimeType::FixedWindow->value, 'fixed_starts_at' => '2026-08-20 10:00:00', 'fixed_expires_at' => '2026-08-21 02:00:00', ]); $this->assertSame(ValidityTimeType::FixedWindow, $validityTime->type); $this->assertInstanceOf(Carbon::class, $validityTime->fixed_starts_at); $this->assertInstanceOf(Carbon::class, $validityTime->fixed_expires_at); $this->assertInstanceOf(CatalogItem::class, $validityTime->catalogItems()->getRelated()); $this->assertInstanceOf(AttributeOption::class, $validityTime->attributeOptions()->getRelated()); $this->assertInstanceOf(Ticket::class, $validityTime->tickets()->getRelated()); } public function test_it_exposes_supported_type_values(): void { $this->assertSame([ 'time_window', 'fixed_window', ], ValidityTimeType::values()); } public function test_fixed_window_is_valid_between_its_limits(): void { $validityTime = new ValidityTime([ 'type' => ValidityTimeType::FixedWindow, 'fixed_starts_at' => '2026-08-20 10:00:00', 'fixed_expires_at' => '2026-08-20 12:00:00', ]); $this->assertTrue($validityTime->isValid(at: Carbon::parse('2026-08-20 10:00:00'))); $this->assertTrue($validityTime->isValid(at: Carbon::parse('2026-08-20 11:00:00'))); $this->assertFalse($validityTime->isValid(at: Carbon::parse('2026-08-20 12:00:00'))); } public function test_time_window_is_valid_between_its_limits(): void { $validityTime = new ValidityTime([ 'type' => ValidityTimeType::TimeWindow, 'start_time' => '11:00:00', 'end_time' => '14:00:00', ]); $this->assertTrue($validityTime->isValid( Carbon::parse('2026-08-20 12:00:00'), )); $this->assertFalse($validityTime->isValid( Carbon::parse('2026-08-20 14:00:00'), )); } }