Return the email nodes, not just the node IDs
This commit is contained in:
parent
7e32227e7d
commit
1013305d38
4 changed files with 44 additions and 9 deletions
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Drupal\opd_daily_emails\Collection;
|
||||
|
||||
use Drupal\node\NodeInterface;
|
||||
|
||||
final class DailyEmailCollection implements \Countable {
|
||||
|
||||
public function __construct(
|
||||
private array $emails,
|
||||
) {
|
||||
}
|
||||
|
||||
public function count(): int {
|
||||
return count($this->emails);
|
||||
}
|
||||
|
||||
public function first(): NodeInterface {
|
||||
return array_values($this->emails)[0];
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
|
|
@ -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(),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue