diff --git a/src/TalksBundle/TwigExtension/TalksExtension.php b/src/TalksBundle/TwigExtension/TalksExtension.php index 7f180649..aca95b9b 100644 --- a/src/TalksBundle/TwigExtension/TalksExtension.php +++ b/src/TalksBundle/TwigExtension/TalksExtension.php @@ -46,7 +46,9 @@ class TalksExtension extends Twig_Extension */ public function getAll($talks, array $eventData = []): Collection { - return collect($talks); + return collect($talks)->sortBy(function ($talk) { + return collect($talk['events'])->pluck('date')->sort()->last(); + }); } /** diff --git a/tests/TalksBundle/TwigExtension/TalksExtensionTest.php b/tests/TalksBundle/TwigExtension/TalksExtensionTest.php index 4318c936..46b49983 100644 --- a/tests/TalksBundle/TwigExtension/TalksExtensionTest.php +++ b/tests/TalksBundle/TwigExtension/TalksExtensionTest.php @@ -46,7 +46,32 @@ class TalksExtensionTest extends TestCase /** @test */ public function talks_are_ordered_by_the_most_recent_event_date() { - $this->markTestIncomplete(); + $talkA = [ + 'title' => 'Talk A', + 'events' => [ + ['event' => 'event_a', 'date' => (new DateTime('-5 days'))->format(TalksExtension::DATE_FORMAT)], + ], + ]; + + $talkB = [ + 'title' => 'Talk B', + 'events' => [ + ['event' => 'event_a', 'date' => (new DateTime('-20 days'))->format(TalksExtension::DATE_FORMAT)], + ], + ]; + + $talkC = [ + 'title' => 'Talk C', + 'events' => [ + ['event' => 'event_a', 'date' => (new DateTime('-3 days'))->format(TalksExtension::DATE_FORMAT)], + ['event' => 'event_b', 'date' => (new DateTime('-10 days'))->format(TalksExtension::DATE_FORMAT)], + ], + ]; + + $unorderedTalks = [$talkC, $talkA, $talkB]; + $orderedTalks = $this->extension->getAll($unorderedTalks); + + $this->assertEquals([$talkC, $talkA, $talkB], $orderedTalks->toArray()); } /** @test */