Change test into an integration test rather than unit test : extend KernelTestCase and get real services from the container.

This commit is contained in:
Julie Lenaerts 2023-12-18 15:36:01 +01:00
parent 726f71c8f1
commit 49dbd09167

View File

@ -11,34 +11,28 @@ declare(strict_types=1);
namespace Repository;
use PHPUnit\Framework\TestCase;
use Chill\MainBundle\Entity\NewsItem;
use Chill\MainBundle\Repository\NewsItemRepository;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\QueryBuilder;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
use Symfony\Component\Clock\ClockInterface;
class NewsItemRepositoryTest extends TestCase
class NewsItemRepositoryTest extends KernelTestCase
{
private $entityManager;
private $clock;
private $repository;
protected function setUp(): void
private function getNewsItemsRepository(): NewsItemRepository
{
$this->entityManager = $this->createMock(EntityManagerInterface::class);
$this->clock = $this->createMock(ClockInterface::class);
$this->repository = new NewsItemRepository(
$this->entityManager,
$this->clock
);
return self::$container->get(NewsItemRepository::class);
}
public function testFindCurrentNews()
{
$this->clock->expects($this->once())->method('now')->willReturn(new \DateTime('2023-01-10'));
self::bootKernel();
$em = self::$container->get(EntityManagerInterface::class);
$repository = $this->getNewsItemsRepository();
$mockClock = $this->createMock(ClockInterface::class);
$mockClock->expects($this->once())->method('now')->willReturn(new \DateTime('2023-01-10'));
$newsItem1 = new NewsItem();
$newsItem1->setTitle('This is a mock news item');
@ -50,7 +44,7 @@ class NewsItemRepositoryTest extends TestCase
$newsItem2->setTitle('This is a mock news item');
$newsItem2->setContent('We are testing that the repository returns the correct news items');
$newsItem2->setStartDate(new \DateTimeImmutable('2023-12-15'));
$newsItem2->setEndDate($this->clock->now());
$newsItem2->setEndDate($mockClock->now());
$newsItem3 = new NewsItem();
$newsItem3->setTitle('This is a mock news item');
@ -58,14 +52,18 @@ class NewsItemRepositoryTest extends TestCase
$newsItem3->setStartDate(new \DateTimeImmutable('2033-11-03'));
$newsItem3->setEndDate(null);
$em->persist($newsItem1);
$em->persist($newsItem2);
$em->persist($newsItem3);
$em->flush();
// Call the method to test
$result = $this->repository->findCurrentNews();
$result = $repository->findCurrentNews();
// Assertions
$this->assertCount(2, $result);
$this->assertInstanceOf(NewsItem::class, $result[0]);
$this->assertContains($newsItem2, $result);
$this->assertContains($newsItem3, $result);
}
}