Count the number of events from talks

This commit is contained in:
Oliver Davies 2021-08-25 01:11:57 +01:00
parent 5048781ae3
commit 92f3865ee7
3 changed files with 51 additions and 5 deletions

View file

@ -2,10 +2,10 @@
title: Talks and workshops
use:
- talks
intro_text: |
Starting with my first talk in September 2012, I have given 82 presentations and workshops at various conferences and meetups, in-person and remotely, on topics including PHP, Drupal, automated testing, Git, CSS, and systems administration.
---
<p>Starting with my first talk in September 2012, I have given {{ get_past_talk_count(data.talks) }} presentations and workshops at various conferences and meetups, in-person and remotely, on topics including PHP, Drupal, automated testing, Git, CSS, and systems administration.</p>
<div class="mt-10">
<div class="space-y-8">
{% for talk in data.talks|sort((a,b) => a.sortable_date < b.sortable_date) %}

View file

@ -17,10 +17,16 @@ final class TalkExtension extends AbstractExtension
];
}
public function getPastTalkCount(array $talks = []): int
public function getPastTalkCount(iterable $talks = []): int
{
return $this->getEventsFromTalks($talks)->count();
}
private function getEventsFromTalks(iterable $talks): Collection
{
$talkCollection = new Collection($talks);
return $talkCollection->count();
return $talkCollection
->flatMap(fn($talk): array => (array) $talk['events']);
}
}

View file

@ -7,9 +7,49 @@ use PHPUnit\Framework\TestCase;
final class TalkExtensionTest extends TestCase
{
private TalkExtension $subject;
public function setUp(): void
{
$this->subject = new TalkExtension();
}
/** @test */
public function it_returns_zero_if_there_are_no_talks(): void
{
$this->assertSame(0, (new TalkExtension())->getPastTalkCount([]));
$this->assertSame(0, $this->subject->getPastTalkCount([]));
}
/** @test */
public function it_counts_a_single_event_from_a_single_talk(): void
{
$talks = [
[
'title' => 'Building static sites with Sculpin',
'events' => [
'',
]
],
];
$this->assertSame(1, $this->subject->getPastTalkCount($talks));
}
/** @test */
public function it_counts_multiple_events_from_a_single_talk(): void
{
$this->markTestIncomplete();
}
/** @test */
public function it_counts_multiple_events_from_multiple_talks(): void
{
$this->markTestIncomplete();
}
/** @test */
public function it_excludes_future_talks(): void
{
$this->markTestIncomplete();
}
}