Mock loadByProperties, return mock nodes, add

...assertions
This commit is contained in:
Oliver Davies 2024-01-22 18:07:07 +00:00 committed by Oliver Davies
parent 09f7f528b9
commit bc34a96187

View file

@ -2,8 +2,10 @@
namespace Drupal\Tests\example\Unit; namespace Drupal\Tests\example\Unit;
use Drupal\Core\Entity\EntityStorageInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\example\Repository\PostNodeRepository; use Drupal\example\Repository\PostNodeRepository;
use Drupal\node\NodeInterface;
use Drupal\Tests\UnitTestCase; use Drupal\Tests\UnitTestCase;
/** /**
@ -13,14 +15,48 @@ final class PostNodeRepositoryUnitTest extends UnitTestCase {
/** @test */ /** @test */
public function it_returns_posts(): void { public function it_returns_posts(): void {
$node1 = $this->createMock(NodeInterface::class);
$node1->method('bundle')->willReturn('post');
$node1->method('getCreatedTime')->willReturn(strtotime('-1 week'));
$node1->method('label')->willReturn('Post one');
$node2 = $this->createMock(NodeInterface::class);
$node2->method('bundle')->willReturn('post');
$node2->method('getCreatedTime')->willReturn(strtotime('-8 days'));
$node2->method('label')->willReturn('Post two');
$node3 = $this->createMock(NodeInterface::class);
$node3->method('bundle')->willReturn('post');
$node3->method('getCreatedTime')->willReturn(strtotime('yesterday'));
$node3->method('label')->willReturn('Post three');
$node4 = $this->createMock(NodeInterface::class);
$node4->method('bundle')->willReturn('page');
$node4->method('label')->willReturn('Not a post');
$nodeStorage = $this->createMock(EntityStorageInterface::class); $nodeStorage = $this->createMock(EntityStorageInterface::class);
$nodeStorage->method('loadByProperties')->willReturn([$node1, $node2, $node3]);
$entityTypeManager = $this->createMock(EntityTypeManagerInterface::class); $entityTypeManager = $this->createMock(EntityTypeManagerInterface::class);
$entityTypeManager->method('getStorage')->with('node')->willReturn($nodeStorage); $entityTypeManager->method('getStorage')->with('node')->willReturn($nodeStorage);
$repository = new PostNodeRepository($entityTypeManager); $repository = new PostNodeRepository($entityTypeManager);
$repository->findAll(); $posts = $repository->findAll();
self::assertContainsOnlyInstancesOf(NodeInterface::class, $posts);
$titles = array_map(
fn (NodeInterface $node) => $node->label(),
$posts,
);
self::assertCount(3, $titles);
self::assertSame(
['Post two', 'Post one', 'Post three'],
$titles,
);
self::assertNotContains('Not a page', $titles);
} }
} }