entityManager = self::getContainer()->get(EntityManagerInterface::class); $this->personDocumentACLAwareRepository = self::getContainer()->get(PersonDocumentACLAwareRepositoryInterface::class); } /** * @dataProvider provideDataBuildFetchQueryForPerson * * @throws \Doctrine\DBAL\Exception * @throws \Doctrine\ORM\NoResultException * @throws \Doctrine\ORM\NonUniqueResultException */ public function testBuildFetchQueryForPerson(?\DateTimeImmutable $startDate, ?\DateTimeImmutable $endDate, ?string $content): void { $security = $this->prophesize(Security::class); $person = $this->entityManager->createQuery('SELECT a FROM '.Person::class.' a') ->setMaxResults(1) ->getSingleResult(); if (null === $person) { throw new \UnexpectedValueException('person found'); } $provider = new PersonDocumentGenericDocProvider( $security->reveal(), $this->personDocumentACLAwareRepository ); $query = $provider->buildFetchQueryForPerson($person, $startDate, $endDate, $content); ['sql' => $sql, 'params' => $params, 'types' => $types] = (new FetchQueryToSqlBuilder())->toSql($query); $nb = $this->entityManager->getConnection() ->fetchOne("SELECT COUNT(*) AS nb FROM ({$sql}) AS sq", $params, $types); self::assertIsInt($nb, 'Test that the query is syntactically correct'); } public static function provideDataBuildFetchQueryForPerson(): iterable { yield [null, null, null]; yield [new \DateTimeImmutable('1 year ago'), null, null]; yield [null, new \DateTimeImmutable('1 year ago'), null]; yield [new \DateTimeImmutable('2 years ago'), new \DateTimeImmutable('1 year ago'), null]; yield [null, null, 'test']; yield [new \DateTimeImmutable('2 years ago'), new \DateTimeImmutable('1 year ago'), 'test']; } }