security = self::$container->get(Security::class); $this->entityManager = self::$container->get(EntityManagerInterface::class); } /** * @dataProvider provideDataForPerson */ public function testBuildFetchQueryForPerson(Person $person, ?\DateTimeImmutable $startDate, ?\DateTimeImmutable $endDate, ?string $content): void { $provider = new PersonCalendarGenericDocProvider($this->security, $this->entityManager); $query = $provider->buildFetchQueryForPerson($person, $startDate, $endDate, $content); ['sql' => $sql, 'params' => $params, 'types' => $types] = (new FetchQueryToSqlBuilder())->toSql($query); $nb = $this->entityManager->getConnection()->fetchOne("SELECT COUNT(*) FROM ({$sql}) AS sq", $params, $types); self::assertIsInt($nb); } public function provideDataForPerson(): iterable { $this->setUp(); if (null === $person = $this->entityManager->createQuery("SELECT p FROM " . Person::class . " p ") ->setMaxResults(1)->getSingleResult()) { throw new \RuntimeException("There is no person"); } yield [$person, null, null, null]; yield [$person, new \DateTimeImmutable("1 year ago"), null, null]; yield [$person, new \DateTimeImmutable("1 year ago"), new \DateTimeImmutable("6 month ago"), null]; yield [$person, new \DateTimeImmutable("1 year ago"), new \DateTimeImmutable("6 month ago"), "text"]; yield [$person, null, null, "text"]; yield [$person, null, new \DateTimeImmutable("6 month ago"), null]; } }