<?php

namespace Drupal\Tests\example\Kernel;

use Drupal\example\Builder\PostBuilder;
use Drupal\example\Repository\PostNodeRepository;
use Drupal\KernelTests\Core\Entity\EntityKernelTestBase;
use Drupal\node\NodeInterface;

class PostNodeRepositoryTest extends EntityKernelTestBase {

  protected static $modules = ['node', 'example'];

  public function testPostsAreReturnedByCreatedDate(): void {
    // Arrange.
    PostBuilder::create()
      ->setCreatedDate('-1 week')
      ->setTitle('Post one')
      ->getPost();

    PostBuilder::create()
      ->setCreatedDate('-8 days')
      ->setTitle('Post two')
      ->getPost();

    PostBuilder::create()
      ->setCreatedDate('yesterday')
      ->setTitle('Post three')
      ->getPost();

    // Act.
    $postRepository = $this->container->get(PostNodeRepository::class);
    assert($postRepository instanceof PostNodeRepository);
    $nodes = $postRepository->findAll();

    // Assert.
    self::assertCount(3, $nodes);

    self::assertSame(
      ['Post two', 'Post one', 'Post three'],
      array_map(
        fn (NodeInterface $node) => $node->label(),
        $nodes
      )
    );
  }

}