diff --git a/src/Bundle/ChillMainBundle/Test/Export/AbstractAggregatorTest.php b/src/Bundle/ChillMainBundle/Test/Export/AbstractAggregatorTest.php index 12182b96b..4069a75b0 100644 --- a/src/Bundle/ChillMainBundle/Test/Export/AbstractAggregatorTest.php +++ b/src/Bundle/ChillMainBundle/Test/Export/AbstractAggregatorTest.php @@ -11,6 +11,8 @@ declare(strict_types=1); namespace Chill\MainBundle\Test\Export; +use Chill\MainBundle\Entity\User; +use Chill\MainBundle\Export\ExportGenerationContext; use Doctrine\ORM\AbstractQuery; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\QueryBuilder; @@ -54,6 +56,18 @@ abstract class AbstractAggregatorTest extends KernelTestCase } } + /** + * A list of data to normalize. + * + * @return iterable{array} + */ + public static function dataProviderFormDataToNormalize(): iterable + { + foreach (static::getFormData() as $data) { + yield [$data, 1, []]; + } + } + /** * provide data for `testAlterQuery`. */ @@ -165,6 +179,19 @@ abstract class AbstractAggregatorTest extends KernelTestCase */ abstract public static function getQueryBuilders(); + protected function getUser(): User + { + $em = static::getContainer()->get(EntityManagerInterface::class); + if (null === $user = $em->createQueryBuilder()->select('u') + ->from(User::class, 'u') + ->setMaxResults(1) + ->getQuery()->getOneOrNullResult()) { + throw new \RuntimeException('User not found'); + } + + return $user; + } + /** * Compare aliases array before and after that aggregator alter query. * @@ -176,7 +203,7 @@ abstract class AbstractAggregatorTest extends KernelTestCase { $aliases = $qb->getAllAliases(); - $this->getAggregator()->alterQuery($qb, $data); + $this->getAggregator()->alterQuery($qb, $data, new ExportGenerationContext($this->getUser())); $alteredQuery = $qb->getAllAliases(); @@ -194,7 +221,7 @@ abstract class AbstractAggregatorTest extends KernelTestCase */ public function testQueryExecution(QueryBuilder $qb, array $data): void { - $this->getAggregator()->alterQuery($qb, $data); + $this->getAggregator()->alterQuery($qb, $data, new ExportGenerationContext($this->getUser())); $actual = $qb->getQuery()->getResult(); @@ -218,7 +245,7 @@ abstract class AbstractAggregatorTest extends KernelTestCase $nbOfSelect = null !== $query->getDQLPart('select') ? \count($query->getDQLPart('select')) : 0; - $this->getAggregator()->alterQuery($query, $data); + $this->getAggregator()->alterQuery($query, $data, new ExportGenerationContext($this->getUser())); $this->assertGreaterThanOrEqual( $nbOfFrom, @@ -256,6 +283,31 @@ abstract class AbstractAggregatorTest extends KernelTestCase ); } + /** + * @dataProvider dataProviderFormDataToNormalize + */ + public function testDataNormalization(array $data, int $version, array $customAssert): void + { + $aggregator = $this->getAggregator(); + $em = $this->getContainer()->get(EntityManagerInterface::class); + + $normalized = $aggregator->normalizeFormData($data); + $actual = $aggregator->denormalizeFormData($normalized, $version); + + self::assertEqualsCanonicalizing(array_keys($data), array_keys($actual)); + + foreach ($data as $key => $value) { + self::assertArrayHasKey($key, $actual); + if (array_key_exists($key, $customAssert)) { + call_user_func($customAssert[$key], $actual[$key], $value); + } elseif ($em->contains($value)) { + self::assertEquals($value->getId(), $actual[$key]->getId()); + } else { + self::assertEquals($value, $actual[$key]); + } + } + } + /** * Test that the query keys are strings. * @@ -302,7 +354,7 @@ abstract class AbstractAggregatorTest extends KernelTestCase $qb->setMaxResults(1); $queryKeys = $this->getAggregator()->getQueryKeys($data); - $this->getAggregator()->alterQuery($qb, $data); + $this->getAggregator()->alterQuery($qb, $data, new ExportGenerationContext($this->getUser())); $results = $qb->getQuery()->getResult(AbstractQuery::HYDRATE_ARRAY); diff --git a/src/Bundle/ChillMainBundle/Test/Export/AbstractFilterTest.php b/src/Bundle/ChillMainBundle/Test/Export/AbstractFilterTest.php index c34cfc706..5fd638a1e 100644 --- a/src/Bundle/ChillMainBundle/Test/Export/AbstractFilterTest.php +++ b/src/Bundle/ChillMainBundle/Test/Export/AbstractFilterTest.php @@ -90,7 +90,7 @@ abstract class AbstractFilterTest extends KernelTestCase } } - private function getUser(): User + protected function getUser(): User { $em = static::getContainer()->get(EntityManagerInterface::class); if (null === $user = $em->createQueryBuilder()->select('u') @@ -152,6 +152,7 @@ abstract class AbstractFilterTest extends KernelTestCase public function testDataNormalization(array $data, int $version, array $customAssert): void { $filter = $this->getFilter(); + $em = $this->getContainer()->get(EntityManagerInterface::class); $normalized = $filter->normalizeFormData($data); $actual = $filter->denormalizeFormData($normalized, $version); @@ -162,6 +163,8 @@ abstract class AbstractFilterTest extends KernelTestCase self::assertArrayHasKey($key, $actual); if (array_key_exists($key, $customAssert)) { call_user_func($customAssert[$key], $actual[$key], $value); + } elseif ($em->contains($value)) { + self::assertEquals($value->getId(), $actual[$key]->getId()); } else { self::assertEquals($value, $actual[$key]); }