| 
									
										
										
										
											2019-01-18 18:06:31 +00:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace Tests\FormatTalksBundle\TwigExtension; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use DateTime; | 
					
						
							|  |  |  | use TalksBundle\TwigExtension\TalksExtension; | 
					
						
							|  |  |  | use Illuminate\Support\Collection; | 
					
						
							|  |  |  | use PHPUnit\Framework\TestCase; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TalksExtensionTest extends TestCase | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * @var TalksExtension | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     private $extension; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * {@inheritdoc} | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function setUp() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->extension = new TalksExtension(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** @test */ | 
					
						
							|  |  |  |     public function talks_given_multiple_times_are_only_returned_once() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-01-18 20:27:50 +00:00
										 |  |  |         $talkA = [ | 
					
						
							|  |  |  |             'title' => 'Talk A', | 
					
						
							|  |  |  |             'events' => [ | 
					
						
							| 
									
										
										
										
											2019-02-13 06:55:18 +00:00
										 |  |  |                 ['event' => 'event_a', 'date' => (new DateTime('-1 days'))->getTimestamp()], | 
					
						
							|  |  |  |                 ['event' => 'event_b', 'date' => (new DateTime('+1 days'))->getTimestamp()], | 
					
						
							| 
									
										
										
										
											2019-01-18 20:27:50 +00:00
										 |  |  |             ], | 
					
						
							|  |  |  |         ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $talkB = [ | 
					
						
							|  |  |  |             'title' => 'Talk B', | 
					
						
							|  |  |  |             'events' => [ | 
					
						
							| 
									
										
										
										
											2019-02-13 06:55:18 +00:00
										 |  |  |                 ['event' => 'event_a', 'date' => (new DateTime('-3 days'))->getTimestamp()], | 
					
						
							| 
									
										
										
										
											2019-01-18 20:27:50 +00:00
										 |  |  |             ], | 
					
						
							|  |  |  |         ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->assertCount(2, $this->extension->getAll([$talkA, $talkB])); | 
					
						
							| 
									
										
										
										
											2019-01-18 18:06:31 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** @test */ | 
					
						
							|  |  |  |     public function talks_are_ordered_by_the_most_recent_event_date() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-01-18 20:38:58 +00:00
										 |  |  |         $talkA = [ | 
					
						
							|  |  |  |             'title' => 'Talk A', | 
					
						
							|  |  |  |             'events' => [ | 
					
						
							| 
									
										
										
										
											2019-02-13 06:55:18 +00:00
										 |  |  |                 ['event' => 'event_a', 'date' => (new DateTime('-5 days'))->getTimestamp()], | 
					
						
							| 
									
										
										
										
											2019-01-18 20:38:58 +00:00
										 |  |  |             ], | 
					
						
							|  |  |  |         ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $talkB = [ | 
					
						
							|  |  |  |             'title' => 'Talk B', | 
					
						
							|  |  |  |             'events' => [ | 
					
						
							| 
									
										
										
										
											2019-02-13 06:55:18 +00:00
										 |  |  |                 ['event' => 'event_a', 'date' => (new DateTime('-20 days'))->getTimestamp()], | 
					
						
							| 
									
										
										
										
											2019-01-18 20:38:58 +00:00
										 |  |  |             ], | 
					
						
							|  |  |  |         ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $talkC = [ | 
					
						
							|  |  |  |             'title' => 'Talk C', | 
					
						
							|  |  |  |             'events' => [ | 
					
						
							| 
									
										
										
										
											2019-02-13 06:55:18 +00:00
										 |  |  |                 ['event' => 'event_a', 'date' => (new DateTime('-3 days'))->getTimestamp()], | 
					
						
							|  |  |  |                 ['event' => 'event_b', 'date' => (new DateTime('-10 days'))->getTimestamp()], | 
					
						
							| 
									
										
										
										
											2019-01-18 20:38:58 +00:00
										 |  |  |             ], | 
					
						
							|  |  |  |         ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $unorderedTalks = [$talkC, $talkA, $talkB]; | 
					
						
							|  |  |  |         $orderedTalks = $this->extension->getAll($unorderedTalks); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->assertEquals([$talkC, $talkA, $talkB], $orderedTalks->toArray()); | 
					
						
							| 
									
										
										
										
											2019-01-18 18:06:31 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** @test */ | 
					
						
							| 
									
										
										
										
											2019-01-18 21:27:03 +00:00
										 |  |  |     public function only_past_talks_can_be_retrieved() | 
					
						
							| 
									
										
										
										
											2019-01-18 18:06:31 +00:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-01-18 21:27:03 +00:00
										 |  |  |         $pastTalk = [ | 
					
						
							|  |  |  |             'title' => 'Past talk', | 
					
						
							|  |  |  |             'events' => [ | 
					
						
							| 
									
										
										
										
											2019-02-13 06:55:18 +00:00
										 |  |  |                 ['date' => (new DateTime('-1 day'))->getTimestamp()], | 
					
						
							| 
									
										
										
										
											2019-01-18 21:27:03 +00:00
										 |  |  |             ] | 
					
						
							|  |  |  |         ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $futureTalk = [ | 
					
						
							|  |  |  |             'title' => 'Future talk', | 
					
						
							|  |  |  |             'events' => [ | 
					
						
							| 
									
										
										
										
											2019-02-13 06:55:18 +00:00
										 |  |  |                 ['date' => (new DateTime('+1 day'))->getTimestamp()], | 
					
						
							| 
									
										
										
										
											2019-01-18 21:27:03 +00:00
										 |  |  |             ], | 
					
						
							|  |  |  |         ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $result = $this->extension->getPast([$pastTalk, $futureTalk]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->assertCount(1, $result); | 
					
						
							|  |  |  |         $this->assertSame($pastTalk, $result->first()); | 
					
						
							| 
									
										
										
										
											2019-01-18 18:06:31 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** @test */ | 
					
						
							| 
									
										
										
										
											2019-01-18 21:44:21 +00:00
										 |  |  |     public function only_current_and_future_talks_can_be_retrieved() | 
					
						
							| 
									
										
										
										
											2019-01-18 18:06:31 +00:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-01-18 21:44:21 +00:00
										 |  |  |         $pastTalk = [ | 
					
						
							|  |  |  |             'title' => 'Past talk', | 
					
						
							|  |  |  |             'events' => [ | 
					
						
							| 
									
										
										
										
											2019-02-13 06:55:18 +00:00
										 |  |  |                 ['date' => (new DateTime('-1 day'))->getTimestamp()], | 
					
						
							| 
									
										
										
										
											2019-01-18 21:44:21 +00:00
										 |  |  |             ] | 
					
						
							|  |  |  |         ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $todayTalk = [ | 
					
						
							|  |  |  |             'title' => 'A talk that it happening today', | 
					
						
							|  |  |  |             'events' => [ | 
					
						
							| 
									
										
										
										
											2019-02-13 06:55:18 +00:00
										 |  |  |                 ['date' => (new DateTime('now'))->getTimestamp()], | 
					
						
							| 
									
										
										
										
											2019-01-18 21:44:21 +00:00
										 |  |  |             ], | 
					
						
							|  |  |  |         ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $futureTalk = [ | 
					
						
							|  |  |  |             'title' => 'Future talk', | 
					
						
							|  |  |  |             'events' => [ | 
					
						
							| 
									
										
										
										
											2019-02-13 06:55:18 +00:00
										 |  |  |                 ['date' => (new DateTime('+1 day'))->getTimestamp()], | 
					
						
							| 
									
										
										
										
											2019-01-18 21:44:21 +00:00
										 |  |  |             ], | 
					
						
							|  |  |  |         ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $result = $this->extension->getUpcoming([$pastTalk, $todayTalk, $futureTalk]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->assertCount(2, $result); | 
					
						
							|  |  |  |         $this->assertSame([$todayTalk, $futureTalk], $result->toArray()); | 
					
						
							| 
									
										
										
										
											2019-01-18 18:06:31 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2019-01-18 21:30:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** @test */ | 
					
						
							|  |  |  |     public function if_a_talk_is_both_upcoming_and_past_then_it_is_only_shown_as_upcoming() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2019-01-18 22:04:53 +00:00
										 |  |  |         $talk = [ | 
					
						
							|  |  |  |             'title' => 'An upcoming talk that has been given before', | 
					
						
							|  |  |  |             'events' => [ | 
					
						
							| 
									
										
										
										
											2019-02-13 06:55:18 +00:00
										 |  |  |                 ['date' => (new DateTime('-1 week'))->getTimestamp()], | 
					
						
							|  |  |  |                 ['date' => (new DateTime('+1 week'))->getTimestamp()], | 
					
						
							| 
									
										
										
										
											2019-01-18 22:04:53 +00:00
										 |  |  |             ], | 
					
						
							|  |  |  |         ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->assertCount(1, $this->extension->getUpcoming([$talk])); | 
					
						
							|  |  |  |         $this->assertEmpty($this->extension->getPast([$talk])); | 
					
						
							| 
									
										
										
										
											2019-01-18 21:30:29 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2019-01-18 18:06:31 +00:00
										 |  |  | } |