/** * @testdox Crews' dates of unavailability are those date periods during which they can not work. */ public function dates() { $crew = new Crew(['name' => 'Test Crew']); $crew->save(); // Open start date. $date1 = new CrewUnavailability(); $date1->crew_id = $crew->id; $date1->end_date = '2015-09-01'; $date1->save(); $this->assertEquals(1, $crew->crewUnavailabilities->count()); $this->assertTrue($crew->availableOn('2015-09-08')); $this->assertFalse($crew->availableOn('2015-08-01')); // Closed both ends. $date2 = new CrewUnavailability(); $date2->crew_id = $crew->id; $date2->start_date = '2015-09-10'; $date2->end_date = '2015-09-20'; $date2->save(); $crew->load('crewUnavailabilities'); $this->assertEquals(2, $crew->crewUnavailabilities->count()); $this->assertFalse($crew->availableOn('2015-09-10')); $this->assertFalse($crew->availableOn('2015-09-12')); $this->assertFalse($crew->availableOn('2015-09-20')); $this->assertTrue($crew->availableOn('2015-09-21')); // Open end date. $date3 = new CrewUnavailability(); $date3->crew_id = $crew->id; $date3->start_date = '2015-10-05'; $date3->save(); $crew->load('crewUnavailabilities'); $this->assertEquals(3, $crew->crewUnavailabilities->count()); $this->assertTrue($crew->availableOn('2015-10-04')); $this->assertFalse($crew->availableOn('2015-10-06')); // All previous availabilities should still hold. $this->assertTrue($crew->availableOn('2015-09-08')); $this->assertFalse($crew->availableOn('2015-08-01')); $this->assertFalse($crew->availableOn('2015-09-10')); $this->assertFalse($crew->availableOn('2015-09-12')); $this->assertFalse($crew->availableOn('2015-09-20')); $this->assertTrue($crew->availableOn('2015-09-21')); $this->assertTrue($crew->availableOn('2015-10-04')); $this->assertFalse($crew->availableOn('2015-10-06')); }
/** * @testdox * @test */ public function dates() { $crew = new Crew(['name' => 'Test Crew']); $crew->save(); // Open start date. $date1 = new CrewUnavailability(); $date1->crew_id = $crew->id; $date1->end_date = '2015-09-01'; $date1->save(); $this->assertNull($date1->start_date); $this->assertFalse($date1->availableOn('2015-08-01')); $this->assertTrue($date1->availableOn('2015-09-08')); // Both dates given. $date2 = new CrewUnavailability(); $date2->crew_id = $crew->id; $date2->start_date = '2015-09-10'; $date2->end_date = '2015-09-20'; $date2->save(); $this->assertTrue($date2->availableOn('2015-09-09')); $this->assertFalse($date2->availableOn('2015-09-10')); $this->assertFalse($date2->availableOn('2015-09-12')); $this->assertFalse($date2->availableOn('2015-09-20')); $this->assertTrue($date2->availableOn('2015-09-21')); // Open end date. $date3 = new CrewUnavailability(); $date3->crew_id = $crew->id; $date3->start_date = '2015-10-05'; $date3->save(); $this->assertTrue($date3->availableOn('2015-10-04')); $this->assertFalse($date3->availableOn('2015-10-06')); // Only 1 day. $date4 = new CrewUnavailability(); $date4->crew_id = $crew->id; $date4->start_date = '2015-10-05'; $date4->end_date = '2015-10-05'; $date4->save(); $this->assertTrue($date4->availableOn('2015-10-04')); $this->assertFalse($date4->availableOn('2015-10-05')); $this->assertFalse($date4->availableOn('2015-10-05 12:34:00')); $this->assertTrue($date4->availableOn('2015-10-06')); }