Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • packages/doctrine-http-filter
1 result
Show changes
Commits on Source (3)
<?php
declare(strict_types=1);
namespace IQDEV\Packages\DoctrineHttpFilter\Exception;
use Exception;
class FilterParameterValueIsNullException extends Exception
{
public function __construct(string $key)
{
parent::__construct('Filter parameter value of key [' . $key . '] is null.');
}
}
......@@ -5,26 +5,24 @@ declare(strict_types=1);
namespace IQDEV\Packages\DoctrineHttpFilter\Filter;
use Doctrine\ORM\QueryBuilder;
use IQDEV\Packages\DoctrineHttpFilter\Exception\FilterParameterValueIsNullException;
use IQDEV\Packages\DoctrineHttpFilter\HttpFilter;
final class Date extends HttpFilter
{
/** @throws FilterParameterValueIsNullException */
public function addToQuery(QueryBuilder $queryBuilder): QueryBuilder
{
$queryBuilder->where(
'SUBSTRING(' . $this->getColumn() . ', 0, 11) = :' . $this->getParameterKey(),
);
if (is_null($this->getHttpValue())) {
throw new FilterParameterValueIsNullException($this->field);
return $queryBuilder;
}
if (! \DateTimeImmutable::createFromFormat('Y-m-d', $this->getHttpValue())) {
throw new FilterParameterValueIsNullException($this->field);
return $queryBuilder;
}
$queryBuilder->where(
'SUBSTRING(' . $this->getColumn() . ', 0, 11) = :' . $this->getParameterKey(),
);
$queryBuilder->setParameter($this->getParameterKey(), $this->getHttpValue());
return $queryBuilder;
......
......@@ -5,12 +5,10 @@ declare(strict_types=1);
namespace IQDEV\Packages\DoctrineHttpFilter\Filter;
use Doctrine\ORM\QueryBuilder;
use IQDEV\Packages\DoctrineHttpFilter\Exception\FilterParameterValueIsNullException;
use IQDEV\Packages\DoctrineHttpFilter\HttpFilter;
final class DateRange extends HttpFilter
{
/** @throws FilterParameterValueIsNullException */
public function addToQuery(QueryBuilder $queryBuilder): QueryBuilder
{
$httpValues = $this->getHttpValue();
......@@ -18,14 +16,14 @@ final class DateRange extends HttpFilter
$toDate = $httpValues['to'] ?? null;
if (is_null($fromDate) && is_null($toDate)) {
throw new FilterParameterValueIsNullException($this->field);
return $queryBuilder;
}
$fromDate = \DateTimeImmutable::createFromFormat('Y-m-d', $fromDate ?? '');
$toDate = \DateTimeImmutable::createFromFormat('Y-m-d', $toDate ?? '');
if (! $fromDate && ! $toDate) {
throw new FilterParameterValueIsNullException($this->field);
return $queryBuilder;
}
if ($fromDate) {
......
......@@ -5,16 +5,14 @@ declare(strict_types=1);
namespace IQDEV\Packages\DoctrineHttpFilter\Filter;
use Doctrine\ORM\QueryBuilder;
use IQDEV\Packages\DoctrineHttpFilter\Exception\FilterParameterValueIsNullException;
use IQDEV\Packages\DoctrineHttpFilter\HttpFilter;
final class In extends HttpFilter
{
/** @throws FilterParameterValueIsNullException */
public function addToQuery(QueryBuilder $queryBuilder): QueryBuilder
{
if ($this->getHttpValue() === null || ! is_array($this->getHttpValue())) {
throw new FilterParameterValueIsNullException($this->field);
return $queryBuilder;
}
$values = array_map(fn($value) => '\'' . $value . '\'', $this->getHttpValue());
......
......@@ -5,22 +5,20 @@ declare(strict_types=1);
namespace IQDEV\Packages\DoctrineHttpFilter\Filter;
use Doctrine\ORM\QueryBuilder;
use IQDEV\Packages\DoctrineHttpFilter\Exception\FilterParameterValueIsNullException;
use IQDEV\Packages\DoctrineHttpFilter\HttpFilter;
final class Like extends HttpFilter
{
/** @throws FilterParameterValueIsNullException */
public function addToQuery(QueryBuilder $queryBuilder): QueryBuilder
{
if ($this->getHttpValue() === null) {
return $queryBuilder;
}
$queryBuilder->where(
$this->getColumn() . ' LIKE :' . $this->getParameterKey(),
);
if ($this->getHttpValue() === null) {
throw new FilterParameterValueIsNullException($this->field);
}
$queryBuilder->setParameter($this->getParameterKey(), '%' . $this->getHttpValue() . '%');
return $queryBuilder;
......
......@@ -5,17 +5,15 @@ declare(strict_types=1);
namespace IQDEV\Packages\DoctrineHttpFilter\Filter;
use Doctrine\ORM\QueryBuilder;
use IQDEV\Packages\DoctrineHttpFilter\Exception\FilterParameterValueIsNullException;
use IQDEV\Packages\DoctrineHttpFilter\HttpFilter;
final class Range extends HttpFilter
{
/** @throws FilterParameterValueIsNullException */
public function addToQuery(QueryBuilder $queryBuilder): QueryBuilder
{
if ((! isset($this->getHttpValue()['min']) || ! is_numeric($this->getHttpValue()['min']))
&& (! isset($this->getHttpValue()['max']) || ! is_numeric($this->getHttpValue()['max']))) {
throw new FilterParameterValueIsNullException($this->field);
return $queryBuilder;
}
if (isset($this->getHttpValue()['min'])) {
......
......@@ -5,22 +5,20 @@ declare(strict_types=1);
namespace IQDEV\Packages\DoctrineHttpFilter\Filter;
use Doctrine\ORM\QueryBuilder;
use IQDEV\Packages\DoctrineHttpFilter\Exception\FilterParameterValueIsNullException;
use IQDEV\Packages\DoctrineHttpFilter\HttpFilter;
final class Where extends HttpFilter
{
/** @throws FilterParameterValueIsNullException */
public function addToQuery(QueryBuilder $queryBuilder): QueryBuilder
{
if ($this->getHttpValue() === null) {
return $queryBuilder;
}
$queryBuilder->where(
$this->getColumn() . ' = :' . $this->getParameterKey(),
);
if ($this->getHttpValue() === null) {
throw new FilterParameterValueIsNullException($this->field);
}
$queryBuilder->setParameter($this->getParameterKey(), $this->getHttpValue());
return $queryBuilder;
......
......@@ -6,7 +6,6 @@ namespace IQDEV\Tests\Packages\DoctrineHttpFilter;
use DateInterval;
use DateTimeImmutable;
use IQDEV\Packages\DoctrineHttpFilter\Exception\FilterParameterValueIsNullException;
use IQDEV\Packages\DoctrineHttpFilter\Filter\DateRange;
use IQDEV\Packages\DoctrineHttpFilter\HttpFilter;
use IQDEV\Tests\Packages\DoctrineHttpFilter\Entity\Post;
......@@ -191,15 +190,17 @@ class FilterByDateRangeTest extends TestCase
/** @var PostRepository $postRepository */
$postRepository = $this->em->getRepository(Post::class);
$this->expectException(FilterParameterValueIsNullException::class);
$countPosts = $postRepository->count();
$postRepository->createQueryByFilter([
$result = $postRepository->createQueryByFilter([
'createdAt' => DateRange::class,
], new Request([
HttpFilter::REQUEST_FILTER_KEY => [],
]))
->getQuery()
->getResult();
$this->assertCount($countPosts, $result);
}
public function testFilterDateRangeWithNotDateParameterValue(): void
......@@ -207,9 +208,9 @@ class FilterByDateRangeTest extends TestCase
/** @var PostRepository $postRepository */
$postRepository = $this->em->getRepository(Post::class);
$this->expectException(FilterParameterValueIsNullException::class);
$countPosts = $postRepository->count();
$postRepository->createQueryByFilter([
$result = $postRepository->createQueryByFilter([
'createdAt' => DateRange::class,
], new Request([
HttpFilter::REQUEST_FILTER_KEY => [
......@@ -218,6 +219,8 @@ class FilterByDateRangeTest extends TestCase
]))
->getQuery()
->getResult();
$this->assertCount($countPosts, $result);
}
public function testFilterDateRangeWithNotDateParameterValues(): void
......@@ -225,9 +228,9 @@ class FilterByDateRangeTest extends TestCase
/** @var PostRepository $postRepository */
$postRepository = $this->em->getRepository(Post::class);
$this->expectException(FilterParameterValueIsNullException::class);
$countPosts = $postRepository->count();
$postRepository->createQueryByFilter([
$result = $postRepository->createQueryByFilter([
'createdAt' => DateRange::class,
], new Request([
HttpFilter::REQUEST_FILTER_KEY => [
......@@ -239,6 +242,8 @@ class FilterByDateRangeTest extends TestCase
]))
->getQuery()
->getResult();
$this->assertCount($countPosts, $result);
}
public function testFilterDateRangeWithDifferentKey(): void
......@@ -246,9 +251,9 @@ class FilterByDateRangeTest extends TestCase
/** @var PostRepository $postRepository */
$postRepository = $this->em->getRepository(Post::class);
$this->expectException(FilterParameterValueIsNullException::class);
$countPosts = $postRepository->count();
$postRepository->createQueryByFilter([
$result = $postRepository->createQueryByFilter([
'createdAt' => DateRange::class,
], new Request([
HttpFilter::REQUEST_FILTER_KEY => [
......@@ -257,6 +262,8 @@ class FilterByDateRangeTest extends TestCase
]))
->getQuery()
->getResult();
$this->assertCount($countPosts, $result);
}
public function testFilterDateRangeWithOnlyFromParameterValue(): void
......
......@@ -6,7 +6,6 @@ namespace IQDEV\Tests\Packages\DoctrineHttpFilter;
use DateInterval;
use DateTimeImmutable;
use IQDEV\Packages\DoctrineHttpFilter\Exception\FilterParameterValueIsNullException;
use IQDEV\Packages\DoctrineHttpFilter\Filter\Date;
use IQDEV\Packages\DoctrineHttpFilter\HttpFilter;
use IQDEV\Tests\Packages\DoctrineHttpFilter\Entity\Post;
......@@ -178,15 +177,17 @@ class FilterByDateTest extends TestCase
/** @var PostRepository $postRepository */
$postRepository = $this->em->getRepository(Post::class);
$this->expectException(FilterParameterValueIsNullException::class);
$countPosts = $postRepository->count();
$postRepository->createQueryByFilter([
$result = $postRepository->createQueryByFilter([
'createdAt' => Date::class,
], new Request([
HttpFilter::REQUEST_FILTER_KEY => [],
]))
->getQuery()
->getResult();
$this->assertCount($countPosts, $result);
}
public function testFilterDateWithNotDateParameterValue(): void
......@@ -194,9 +195,9 @@ class FilterByDateTest extends TestCase
/** @var PostRepository $postRepository */
$postRepository = $this->em->getRepository(Post::class);
$this->expectException(FilterParameterValueIsNullException::class);
$countPosts = $postRepository->count();
$postRepository->createQueryByFilter([
$result = $postRepository->createQueryByFilter([
'createdAt' => Date::class,
], new Request([
HttpFilter::REQUEST_FILTER_KEY => [
......@@ -205,6 +206,8 @@ class FilterByDateTest extends TestCase
]))
->getQuery()
->getResult();
$this->assertCount($countPosts, $result);
}
public function testFilterDateWithDifferentKey(): void
......@@ -212,9 +215,9 @@ class FilterByDateTest extends TestCase
/** @var PostRepository $postRepository */
$postRepository = $this->em->getRepository(Post::class);
$this->expectException(FilterParameterValueIsNullException::class);
$countPosts = $postRepository->count();
$postRepository->createQueryByFilter([
$result = $postRepository->createQueryByFilter([
'createdAt' => Date::class,
], new Request([
HttpFilter::REQUEST_FILTER_KEY => [
......@@ -223,5 +226,7 @@ class FilterByDateTest extends TestCase
]))
->getQuery()
->getResult();
$this->assertCount($countPosts, $result);
}
}
......@@ -4,7 +4,6 @@ declare(strict_types=1);
namespace IQDEV\Tests\Packages\DoctrineHttpFilter;
use IQDEV\Packages\DoctrineHttpFilter\Exception\FilterParameterValueIsNullException;
use IQDEV\Packages\DoctrineHttpFilter\Filter\In;
use IQDEV\Packages\DoctrineHttpFilter\HttpFilter;
use IQDEV\Tests\Packages\DoctrineHttpFilter\Entity\Post;
......@@ -131,15 +130,17 @@ class FilterByInTest extends TestCase
/** @var PostRepository $postRepository */
$postRepository = $this->em->getRepository(Post::class);
$this->expectException(FilterParameterValueIsNullException::class);
$countPosts = $postRepository->count();
$postRepository->createQueryByFilter([
$result = $postRepository->createQueryByFilter([
'title' => In::class,
], new Request([
HttpFilter::REQUEST_FILTER_KEY => [],
]))
->getQuery()
->getResult();
$this->assertCount($countPosts, $result);
}
public function testFilterInWithNotArrayParameterValue(): void
......@@ -147,9 +148,9 @@ class FilterByInTest extends TestCase
/** @var PostRepository $postRepository */
$postRepository = $this->em->getRepository(Post::class);
$this->expectException(FilterParameterValueIsNullException::class);
$countPosts = $postRepository->count();
$postRepository->createQueryByFilter([
$result = $postRepository->createQueryByFilter([
'title' => In::class,
], new Request([
HttpFilter::REQUEST_FILTER_KEY => [
......@@ -158,6 +159,8 @@ class FilterByInTest extends TestCase
]))
->getQuery()
->getResult();
$this->assertCount($countPosts, $result);
}
public function testFilterInWithDifferentKey(): void
......@@ -165,9 +168,9 @@ class FilterByInTest extends TestCase
/** @var PostRepository $postRepository */
$postRepository = $this->em->getRepository(Post::class);
$this->expectException(FilterParameterValueIsNullException::class);
$countPosts = $postRepository->count();
$postRepository->createQueryByFilter([
$result = $postRepository->createQueryByFilter([
'title' => In::class,
], new Request([
HttpFilter::REQUEST_FILTER_KEY => [
......@@ -176,5 +179,7 @@ class FilterByInTest extends TestCase
]))
->getQuery()
->getResult();
$this->assertCount($countPosts, $result);
}
}
......@@ -4,7 +4,6 @@ declare(strict_types=1);
namespace IQDEV\Tests\Packages\DoctrineHttpFilter;
use IQDEV\Packages\DoctrineHttpFilter\Exception\FilterParameterValueIsNullException;
use IQDEV\Packages\DoctrineHttpFilter\Filter\Like;
use IQDEV\Packages\DoctrineHttpFilter\HttpFilter;
use IQDEV\Tests\Packages\DoctrineHttpFilter\Entity\Post;
......@@ -131,25 +130,27 @@ class FilterByLikeTest extends TestCase
/** @var PostRepository $postRepository */
$postRepository = $this->em->getRepository(Post::class);
$this->expectException(FilterParameterValueIsNullException::class);
$countPosts = $postRepository->count();
$postRepository->createQueryByFilter([
$result = $postRepository->createQueryByFilter([
'title' => Like::class,
], new Request([
HttpFilter::REQUEST_FILTER_KEY => [],
]))
->getQuery()
->getResult();
$this->assertCount($countPosts, $result);
}
public function testFilterDateWithDifferentKey(): void
public function testFilterLikeWithDifferentKey(): void
{
/** @var PostRepository $postRepository */
$postRepository = $this->em->getRepository(Post::class);
$this->expectException(FilterParameterValueIsNullException::class);
$countPosts = $postRepository->count();
$postRepository->createQueryByFilter([
$result = $postRepository->createQueryByFilter([
'title' => Like::class,
], new Request([
HttpFilter::REQUEST_FILTER_KEY => [
......@@ -158,5 +159,7 @@ class FilterByLikeTest extends TestCase
]))
->getQuery()
->getResult();
$this->assertCount($countPosts, $result);
}
}
......@@ -5,7 +5,6 @@ declare(strict_types=1);
namespace IQDEV\Tests\Packages\DoctrineHttpFilter;
use DateTimeImmutable;
use IQDEV\Packages\DoctrineHttpFilter\Exception\FilterParameterValueIsNullException;
use IQDEV\Packages\DoctrineHttpFilter\Filter\Range;
use IQDEV\Packages\DoctrineHttpFilter\HttpFilter;
use IQDEV\Tests\Packages\DoctrineHttpFilter\Entity\Post;
......@@ -196,15 +195,17 @@ class FilterByRangeTest extends TestCase
/** @var PostRepository $postRepository */
$postRepository = $this->em->getRepository(Post::class);
$this->expectException(FilterParameterValueIsNullException::class);
$countPosts = $postRepository->count();
$postRepository->createQueryByFilter([
$result = $postRepository->createQueryByFilter([
'createdAt' => Range::class,
], new Request([
HttpFilter::REQUEST_FILTER_KEY => [],
]))
->getQuery()
->getResult();
$this->assertCount($countPosts, $result);
}
public function testFilterRangeWithNotNumberParameterValue(): void
......@@ -212,9 +213,9 @@ class FilterByRangeTest extends TestCase
/** @var PostRepository $postRepository */
$postRepository = $this->em->getRepository(Post::class);
$this->expectException(FilterParameterValueIsNullException::class);
$countPosts = $postRepository->count();
$postRepository->createQueryByFilter([
$result = $postRepository->createQueryByFilter([
'countOfViews' => Range::class,
], new Request([
HttpFilter::REQUEST_FILTER_KEY => [
......@@ -223,6 +224,8 @@ class FilterByRangeTest extends TestCase
]))
->getQuery()
->getResult();
$this->assertCount($countPosts, $result);
}
public function testFilterRangeWithNotNumberParameterValues(): void
......@@ -230,9 +233,9 @@ class FilterByRangeTest extends TestCase
/** @var PostRepository $postRepository */
$postRepository = $this->em->getRepository(Post::class);
$this->expectException(FilterParameterValueIsNullException::class);
$countPosts = $postRepository->count();
$postRepository->createQueryByFilter([
$result = $postRepository->createQueryByFilter([
'countOfViews' => Range::class,
], new Request([
HttpFilter::REQUEST_FILTER_KEY => [
......@@ -244,6 +247,8 @@ class FilterByRangeTest extends TestCase
]))
->getQuery()
->getResult();
$this->assertCount($countPosts, $result);
}
public function testFilterRangeWithDifferentKey(): void
......@@ -251,9 +256,9 @@ class FilterByRangeTest extends TestCase
/** @var PostRepository $postRepository */
$postRepository = $this->em->getRepository(Post::class);
$this->expectException(FilterParameterValueIsNullException::class);
$countPosts = $postRepository->count();
$postRepository->createQueryByFilter([
$result = $postRepository->createQueryByFilter([
'countOfViews' => Range::class,
], new Request([
HttpFilter::REQUEST_FILTER_KEY => [
......@@ -262,6 +267,8 @@ class FilterByRangeTest extends TestCase
]))
->getQuery()
->getResult();
$this->assertCount($countPosts, $result);
}
public function testFilterRangeWithOnlyMinParameterValue(): void
......
......@@ -4,7 +4,6 @@ declare(strict_types=1);
namespace IQDEV\Tests\Packages\DoctrineHttpFilter;
use IQDEV\Packages\DoctrineHttpFilter\Exception\FilterParameterValueIsNullException;
use IQDEV\Packages\DoctrineHttpFilter\Filter\Where;
use IQDEV\Packages\DoctrineHttpFilter\HttpFilter;
use IQDEV\Tests\Packages\DoctrineHttpFilter\Entity\Post;
......@@ -117,15 +116,17 @@ class FilterByWhereTest extends TestCase
/** @var PostRepository $postRepository */
$postRepository = $this->em->getRepository(Post::class);
$this->expectException(FilterParameterValueIsNullException::class);
$countPosts = $postRepository->count();
$postRepository->createQueryByFilter([
$result = $postRepository->createQueryByFilter([
'title' => Where::class,
], new Request([
HttpFilter::REQUEST_FILTER_KEY => [],
]))
->getQuery()
->getResult();
$this->assertCount($countPosts, $result);
}
public function testFilterWhereWithDifferentKey(): void
......@@ -133,9 +134,9 @@ class FilterByWhereTest extends TestCase
/** @var PostRepository $postRepository */
$postRepository = $this->em->getRepository(Post::class);
$this->expectException(FilterParameterValueIsNullException::class);
$countPosts = $postRepository->count();
$postRepository->createQueryByFilter([
$result = $postRepository->createQueryByFilter([
'title' => Where::class,
], new Request([
HttpFilter::REQUEST_FILTER_KEY => [
......@@ -144,5 +145,7 @@ class FilterByWhereTest extends TestCase
]))
->getQuery()
->getResult();
$this->assertCount($countPosts, $result);
}
}