diff --git a/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/Test/FilterApplierScenario.php b/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/Test/FilterApplierScenario.php new file mode 100644 index 0000000..8fa8cf7 --- /dev/null +++ b/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/Test/FilterApplierScenario.php @@ -0,0 +1,72 @@ +filters = $filters; + + $filterParams = $this->filterParamBuilder->build($filters); + $filterParams->applyToTarget($this->queryBuilder); + + return $this; + } + + public function thenQueryBuilt(string $expectedQuery): self + { + /** @var string $actual */ + $actual = $this->queryBuilder->getQuery()->getDQL(); + + DoctrineUtil::assertDQLEquals($expectedQuery, $actual); + + return $this; + } + + /** + * @psalm-suppress MixedArgument + * + * Verify that the values of the requested filters are equal to the values bind into the query. + */ + public function andFilterValuesMatch(): self + { + $this->testCase::assertEquals( + array_values($this->filters), + array_map( + fn (string $val) => trim($val, '%'), + array_map( + fn (Parameter $val) => (string) $val->getValue(), + $this->queryBuilder->getParameters()->toArray(), + ), + ), + ); + + return $this; + } + + public function queryBuilder(): QueryBuilder + { + return $this->queryBuilder; + } +} diff --git a/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/Test/FilterApplierScenarioTestCase.php b/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/Test/FilterApplierScenarioTestCase.php new file mode 100644 index 0000000..0b903b3 --- /dev/null +++ b/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Filter/Test/FilterApplierScenarioTestCase.php @@ -0,0 +1,38 @@ +em = self::getContainer()->get(EntityManagerInterface::class); + $this->createScenario(); + } + + private function createScenario(): void + { + $this->scenario = new FilterApplierScenario( + $this, + $this->createFilterParamBuilder(), + $this->createQueryBuilder(), + ); + } + + abstract protected function createFilterParamBuilder(): FilterBuilder; + + abstract protected function createQueryBuilder(): QueryBuilder; +} diff --git a/tests/Tool/DoctrineUtil.php b/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Test/DoctrineUtil.php similarity index 89% rename from tests/Tool/DoctrineUtil.php rename to src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Test/DoctrineUtil.php index 7509a8d..f01c9d3 100644 --- a/tests/Tool/DoctrineUtil.php +++ b/src/Matiux/DDDStarterPack/Aggregate/Domain/Repository/Test/DoctrineUtil.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace Tests\Tool; +namespace DDDStarterPack\Aggregate\Domain\Repository\Test; use PHPUnit\Framework\TestCase; diff --git a/tests/Integration/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineGenericPaginationApplierTest.php b/tests/Integration/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineGenericPaginationApplierTest.php index 8f04419..e39ce61 100644 --- a/tests/Integration/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineGenericPaginationApplierTest.php +++ b/tests/Integration/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineGenericPaginationApplierTest.php @@ -4,11 +4,11 @@ namespace Tests\Integration\DDDStarterPack\Aggregate\Infrastructure\Doctrine\Repository\Filter; +use DDDStarterPack\Aggregate\Domain\Repository\Test\DoctrineUtil; use PHPUnit\Framework\TestCase; use Tests\Support\Model\Doctrine\DoctrinePaginationApplier; use Tests\Support\Model\Person; use Tests\Support\TestFilterBuilder; -use Tests\Tool\DoctrineUtil; use Tests\Tool\EntityManagerBuilder; class DoctrineGenericPaginationApplierTest extends TestCase diff --git a/tests/Integration/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineGenericSortApplierTest.php b/tests/Integration/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineGenericSortApplierTest.php index 12519fb..b3f81ef 100644 --- a/tests/Integration/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineGenericSortApplierTest.php +++ b/tests/Integration/DDDStarterPack/Aggregate/Infrastructure/Doctrine/Repository/Filter/DoctrineGenericSortApplierTest.php @@ -4,12 +4,12 @@ namespace Tests\Integration\DDDStarterPack\Aggregate\Infrastructure\Doctrine\Repository\Filter; +use DDDStarterPack\Aggregate\Domain\Repository\Test\DoctrineUtil; use Doctrine\ORM\QueryBuilder; use PHPUnit\Framework\TestCase; use Tests\Support\Model\Doctrine\DoctrineSortApplier; use Tests\Support\Model\Person; use Tests\Support\TestFilterBuilder; -use Tests\Tool\DoctrineUtil; use Tests\Tool\EntityManagerBuilder; class DoctrineGenericSortApplierTest extends TestCase diff --git a/tests/Unit/DDDStarterPack/DataTransformer/Application/BasicPaginatorDataTransformerTest.php b/tests/Unit/DDDStarterPack/DataTransformer/Application/BasicPaginatorDataTransformerTest.php index 689eb0e..1563761 100644 --- a/tests/Unit/DDDStarterPack/DataTransformer/Application/BasicPaginatorDataTransformerTest.php +++ b/tests/Unit/DDDStarterPack/DataTransformer/Application/BasicPaginatorDataTransformerTest.php @@ -70,4 +70,4 @@ protected function getSingleTransformerNs(): string { return PersonDataTransformer::class; } -} \ No newline at end of file +}