Sort talks as part of the FormatTalksBundle

This commit is contained in:
Oliver Davies 2017-11-07 18:08:23 +00:00
parent dab9a0e9b3
commit eb6a42bae7
3 changed files with 15 additions and 23 deletions

View file

@ -2,7 +2,7 @@
<h2>Events</h2>
{% include "talks-table" with {
talks: { talks: [page], event_data: site.events }|all_talks|reverse,
talks: { talks: [page], event_data: site.events }|all_talks,
talk_page: true
} %}
</div>

View file

@ -41,7 +41,7 @@ class FormatTalksExtension extends Twig_Extension
*/
public function getAll(array $data)
{
return $this->sort($this->format($data));
return $this->format($data)->sortBy('event.date');
}
/**
@ -55,9 +55,9 @@ class FormatTalksExtension extends Twig_Extension
*/
public function getUpcoming(array $data)
{
return $this->sort($this->format($data)->filter(function ($talk) {
return $this->format($data)->filter(function ($talk) {
return $talk['event']['date'] >= $this->today;
}));
})->sortBy('event.date');
}
/**
@ -71,9 +71,9 @@ class FormatTalksExtension extends Twig_Extension
*/
public function getPast(array $data)
{
return $this->sort($this->format($data)->filter(function ($talk) {
return $this->format($data)->filter(function ($talk) {
return $talk['event']['date'] < $this->today;
}));
})->sortByDesc('event.date');
}
/**
@ -100,18 +100,6 @@ class FormatTalksExtension extends Twig_Extension
});
}
/**
* Sort and return the talks.
*
* @param Collection $talks The talk data.
*
* @return array
*/
private function sort(Collection $talks)
{
return $talks->sortByDesc('event.date')->all();
}
/**
* {@inheritdoc}
*/

View file

@ -4,6 +4,7 @@ namespace FormatTalksBundle\Tests\Twig;
use DateTime;
use FormatTalksBundle\Twig\FormatTalksExtension;
use Illuminate\Support\Collection;
use PHPUnit\Framework\TestCase;
class FormatTalksTest extends TestCase
@ -99,8 +100,9 @@ class FormatTalksTest extends TestCase
$this->assertCount(3, $results);
// Earliest events should be returned first.
$this->assertEquals(
[$eventA['date'], $eventC['date'], $eventB['date']],
[$eventB['date'], $eventC['date'], $eventA['date']],
$this->extractDates($results)
);
}
@ -128,8 +130,9 @@ class FormatTalksTest extends TestCase
$this->assertCount(3, $results);
// Earliest events should be returned first.
$this->assertEquals(
[$eventE['date'], $eventA['date'], $eventC['date']],
[$eventC['date'], $eventA['date'], $eventE['date']],
$this->extractDates($results)
);
}
@ -159,6 +162,7 @@ class FormatTalksTest extends TestCase
$this->assertCount(2, $results);
// Latest events should be returned first.
$this->assertEquals(
[$eventB['date'], $eventF['date']],
$this->extractDates($results)
@ -168,12 +172,12 @@ class FormatTalksTest extends TestCase
/**
* Extract the returned dates from the results.
*
* @param array $results The results returned from the filter.
* @param Collection $results The results returned from the filter.
*
* @return array An array of dates.
*/
private function extractDates(array $results)
private function extractDates(Collection $results)
{
return collect($results)->pluck('event.date')->all();
return $results->pluck('event.date')->all();
}
}