mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
Refactor tests to include ExportGenerationContext and data normalization
Added ExportGenerationContext usage in aggregator and filter tests to provide user context during query alterations. Introduced new data normalization tests and related logic, ensuring consistency and validation for normalized and denormalized forms. Refactored `getUser` methods for better scoping and reusability.
This commit is contained in:
parent
3f218e7183
commit
80b9ce3c3e
@ -11,6 +11,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace Chill\MainBundle\Test\Export;
|
namespace Chill\MainBundle\Test\Export;
|
||||||
|
|
||||||
|
use Chill\MainBundle\Entity\User;
|
||||||
|
use Chill\MainBundle\Export\ExportGenerationContext;
|
||||||
use Doctrine\ORM\AbstractQuery;
|
use Doctrine\ORM\AbstractQuery;
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
use Doctrine\ORM\QueryBuilder;
|
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`.
|
* provide data for `testAlterQuery`.
|
||||||
*/
|
*/
|
||||||
@ -165,6 +179,19 @@ abstract class AbstractAggregatorTest extends KernelTestCase
|
|||||||
*/
|
*/
|
||||||
abstract public static function getQueryBuilders();
|
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.
|
* Compare aliases array before and after that aggregator alter query.
|
||||||
*
|
*
|
||||||
@ -176,7 +203,7 @@ abstract class AbstractAggregatorTest extends KernelTestCase
|
|||||||
{
|
{
|
||||||
$aliases = $qb->getAllAliases();
|
$aliases = $qb->getAllAliases();
|
||||||
|
|
||||||
$this->getAggregator()->alterQuery($qb, $data);
|
$this->getAggregator()->alterQuery($qb, $data, new ExportGenerationContext($this->getUser()));
|
||||||
|
|
||||||
$alteredQuery = $qb->getAllAliases();
|
$alteredQuery = $qb->getAllAliases();
|
||||||
|
|
||||||
@ -194,7 +221,7 @@ abstract class AbstractAggregatorTest extends KernelTestCase
|
|||||||
*/
|
*/
|
||||||
public function testQueryExecution(QueryBuilder $qb, array $data): void
|
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();
|
$actual = $qb->getQuery()->getResult();
|
||||||
|
|
||||||
@ -218,7 +245,7 @@ abstract class AbstractAggregatorTest extends KernelTestCase
|
|||||||
$nbOfSelect = null !== $query->getDQLPart('select') ?
|
$nbOfSelect = null !== $query->getDQLPart('select') ?
|
||||||
\count($query->getDQLPart('select')) : 0;
|
\count($query->getDQLPart('select')) : 0;
|
||||||
|
|
||||||
$this->getAggregator()->alterQuery($query, $data);
|
$this->getAggregator()->alterQuery($query, $data, new ExportGenerationContext($this->getUser()));
|
||||||
|
|
||||||
$this->assertGreaterThanOrEqual(
|
$this->assertGreaterThanOrEqual(
|
||||||
$nbOfFrom,
|
$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.
|
* Test that the query keys are strings.
|
||||||
*
|
*
|
||||||
@ -302,7 +354,7 @@ abstract class AbstractAggregatorTest extends KernelTestCase
|
|||||||
$qb->setMaxResults(1);
|
$qb->setMaxResults(1);
|
||||||
|
|
||||||
$queryKeys = $this->getAggregator()->getQueryKeys($data);
|
$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);
|
$results = $qb->getQuery()->getResult(AbstractQuery::HYDRATE_ARRAY);
|
||||||
|
|
||||||
|
@ -90,7 +90,7 @@ abstract class AbstractFilterTest extends KernelTestCase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getUser(): User
|
protected function getUser(): User
|
||||||
{
|
{
|
||||||
$em = static::getContainer()->get(EntityManagerInterface::class);
|
$em = static::getContainer()->get(EntityManagerInterface::class);
|
||||||
if (null === $user = $em->createQueryBuilder()->select('u')
|
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
|
public function testDataNormalization(array $data, int $version, array $customAssert): void
|
||||||
{
|
{
|
||||||
$filter = $this->getFilter();
|
$filter = $this->getFilter();
|
||||||
|
$em = $this->getContainer()->get(EntityManagerInterface::class);
|
||||||
|
|
||||||
$normalized = $filter->normalizeFormData($data);
|
$normalized = $filter->normalizeFormData($data);
|
||||||
$actual = $filter->denormalizeFormData($normalized, $version);
|
$actual = $filter->denormalizeFormData($normalized, $version);
|
||||||
@ -162,6 +163,8 @@ abstract class AbstractFilterTest extends KernelTestCase
|
|||||||
self::assertArrayHasKey($key, $actual);
|
self::assertArrayHasKey($key, $actual);
|
||||||
if (array_key_exists($key, $customAssert)) {
|
if (array_key_exists($key, $customAssert)) {
|
||||||
call_user_func($customAssert[$key], $actual[$key], $value);
|
call_user_func($customAssert[$key], $actual[$key], $value);
|
||||||
|
} elseif ($em->contains($value)) {
|
||||||
|
self::assertEquals($value->getId(), $actual[$key]->getId());
|
||||||
} else {
|
} else {
|
||||||
self::assertEquals($value, $actual[$key]);
|
self::assertEquals($value, $actual[$key]);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user