Skip to content

Commit

Permalink
test: add filter param scenario test case
Browse files Browse the repository at this point in the history
  • Loading branch information
matiux committed Dec 14, 2022
1 parent 990f2a0 commit 7f16d3a
Show file tree
Hide file tree
Showing 6 changed files with 114 additions and 4 deletions.
@@ -0,0 +1,72 @@
<?php

declare(strict_types=1);

namespace DDDStarterPack\Aggregate\Domain\Repository\Filter\Test;

use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterBuilder;
use DDDStarterPack\Aggregate\Domain\Repository\Test\DoctrineUtil;
use Doctrine\ORM\Query\Parameter;
use Doctrine\ORM\QueryBuilder;
use PHPUnit\Framework\TestCase;

/**
* @psalm-suppress PropertyNotSetInConstructor
*/
class FilterApplierScenario
{
private array $filters;

public function __construct(
private TestCase $testCase,
private FilterBuilder $filterParamBuilder,
private QueryBuilder $queryBuilder,
) {
}

public function whenFiltersApplied(array $filters): self
{
$this->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;
}
}
@@ -0,0 +1,38 @@
<?php

declare(strict_types=1);

namespace DDDStarterPack\Aggregate\Domain\Repository\Filter\Test;

use DDDStarterPack\Aggregate\Domain\Repository\Filter\FilterBuilder;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\QueryBuilder;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;

abstract class FilterApplierScenarioTestCase extends KernelTestCase
{
protected FilterApplierScenario $scenario;
protected EntityManagerInterface $em;

protected function setUp(): void
{
/**
* @psalm-suppress PropertyTypeCoercion
*/
$this->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;
}
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace Tests\Tool;
namespace DDDStarterPack\Aggregate\Domain\Repository\Test;

use PHPUnit\Framework\TestCase;

Expand Down
Expand Up @@ -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
Expand Down
Expand Up @@ -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
Expand Down
Expand Up @@ -70,4 +70,4 @@ protected function getSingleTransformerNs(): string
{
return PersonDataTransformer::class;
}
}
}

0 comments on commit 7f16d3a

Please sign in to comment.