diff --git a/modules/opd_daily_emails/src/Collection/DailyEmailCollection.php b/modules/opd_daily_emails/src/Collection/DailyEmailCollection.php new file mode 100644 index 000000000..975f2453b --- /dev/null +++ b/modules/opd_daily_emails/src/Collection/DailyEmailCollection.php @@ -0,0 +1,24 @@ +emails); + } + + public function first(): NodeInterface { + return array_values($this->emails)[0]; + } + +} diff --git a/modules/opd_daily_emails/src/Repository/DailyEmailNodeRepository.php b/modules/opd_daily_emails/src/Repository/DailyEmailNodeRepository.php index 3142f7ac8..69af08ba3 100644 --- a/modules/opd_daily_emails/src/Repository/DailyEmailNodeRepository.php +++ b/modules/opd_daily_emails/src/Repository/DailyEmailNodeRepository.php @@ -6,6 +6,7 @@ namespace Drupal\opd_daily_emails\Repository; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\node\NodeInterface; +use Drupal\opd_daily_emails\Collection\DailyEmailCollection; final class DailyEmailNodeRepository implements DailyEmailRepositoryInterface { @@ -14,20 +15,21 @@ final class DailyEmailNodeRepository implements DailyEmailRepositoryInterface { ) { } - public function getAll(): array { - $query = $this->entityTypeManager - ->getStorage('node') - ->getQuery(); + public function getAll(): DailyEmailCollection { + $nodeStorage = $this->entityTypeManager + ->getStorage('node'); + + $query = $nodeStorage->getQuery(); $query->condition('status', NodeInterface::PUBLISHED); $query->condition('type', 'daily_email'); $query->accessCheck(TRUE); - $result = $query->execute(); + $nodeIds = $query->execute(); + $nodes = $nodeStorage->loadMultiple($nodeIds); - // TODO: this returns a list of node IDs. Load and return the nodes. - return $result; + return new DailyEmailCollection($nodes); } } diff --git a/modules/opd_daily_emails/src/Repository/DailyEmailRepositoryInterface.php b/modules/opd_daily_emails/src/Repository/DailyEmailRepositoryInterface.php index b25827399..5445c0105 100644 --- a/modules/opd_daily_emails/src/Repository/DailyEmailRepositoryInterface.php +++ b/modules/opd_daily_emails/src/Repository/DailyEmailRepositoryInterface.php @@ -4,8 +4,10 @@ declare(strict_types=1); namespace Drupal\opd_daily_emails\Repository; +use Drupal\opd_daily_emails\Collection\DailyEmailCollection; + interface DailyEmailRepositoryInterface { - public function getAll(): array; + public function getAll(): DailyEmailCollection; } diff --git a/modules/opd_daily_emails/tests/src/Kernel/Repository/DailyEmailNodeRepositoryTest.php b/modules/opd_daily_emails/tests/src/Kernel/Repository/DailyEmailNodeRepositoryTest.php index 40b0f2e19..721486744 100644 --- a/modules/opd_daily_emails/tests/src/Kernel/Repository/DailyEmailNodeRepositoryTest.php +++ b/modules/opd_daily_emails/tests/src/Kernel/Repository/DailyEmailNodeRepositoryTest.php @@ -39,9 +39,16 @@ final class DailyEmailNodeRepositoryTest extends EntityKernelTestBase { expected: DailyEmailRepositoryInterface::class, ); + $emails = $repository->getAll(); + $this->assertCount( expectedCount: 1, - haystack: $repository->getAll(), + haystack: $emails, + ); + + $this->assertSame( + expected: 'A published daily email', + actual: $emails->first()->label(), ); }