From 051dbba7c42e66b29298dbf340fec88f0b600bf7 Mon Sep 17 00:00:00 2001 From: "a.shamavov" Date: Mon, 3 Mar 2025 16:04:23 +0500 Subject: [PATCH] =?UTF-8?q?tests:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D1=84=D0=B8=D0=BB=D1=8C=D1=82=D1=80=D1=8B?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20DateRange?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/FilterByDateRangeTest.php | 159 ++++++++++++++++++++++++++++++++ 1 file changed, 159 insertions(+) diff --git a/tests/FilterByDateRangeTest.php b/tests/FilterByDateRangeTest.php index 28c83ef..2850d92 100644 --- a/tests/FilterByDateRangeTest.php +++ b/tests/FilterByDateRangeTest.php @@ -6,6 +6,7 @@ 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; @@ -175,6 +176,7 @@ class FilterByDateRangeTest extends TestCase HttpFilter::REQUEST_FILTER_KEY => [ 'createdAt' => [ 'from' => $firstDate->add(new DateInterval('P1Y'))->format('Y-m-d'), + 'to' => $secondDate->add(new DateInterval('P1Y'))->format('Y-m-d') ], ], ])) @@ -183,4 +185,161 @@ class FilterByDateRangeTest extends TestCase $this->assertEmpty($result); } + + public function testFilterDateRangeWithoutParameterValue(): void + { + /** @var PostRepository $postRepository */ + $postRepository = $this->em->getRepository(Post::class); + + $this->expectException(FilterParameterValueIsNullException::class); + + $postRepository->createQueryByFilter([ + 'createdAt' => DateRange::class, + ], new Request([ + HttpFilter::REQUEST_FILTER_KEY => [], + ])) + ->getQuery() + ->getResult(); + } + + public function testFilterDateRangeWithNotDateParameterValue(): void + { + /** @var PostRepository $postRepository */ + $postRepository = $this->em->getRepository(Post::class); + + $this->expectException(FilterParameterValueIsNullException::class); + + $postRepository->createQueryByFilter([ + 'createdAt' => DateRange::class, + ], new Request([ + HttpFilter::REQUEST_FILTER_KEY => [ + 'createdAt' => 'not date', + ], + ])) + ->getQuery() + ->getResult(); + } + + public function testFilterDateRangeWithNotDateParameterValues(): void + { + /** @var PostRepository $postRepository */ + $postRepository = $this->em->getRepository(Post::class); + + $result = $postRepository->createQueryByFilter([ + 'createdAt' => DateRange::class, + ], new Request([ + HttpFilter::REQUEST_FILTER_KEY => [ + 'createdAt' => [ + 'from' => 'not date', + 'to' => 'not date' + ], + ], + ])) + ->getQuery() + ->getResult(); + + $this->assertEmpty($result); + } + + public function testFilterDateRangeWithDifferentKey(): void + { + /** @var PostRepository $postRepository */ + $postRepository = $this->em->getRepository(Post::class); + + $this->expectException(FilterParameterValueIsNullException::class); + + $postRepository->createQueryByFilter([ + 'createdAt' => DateRange::class, + ], new Request([ + HttpFilter::REQUEST_FILTER_KEY => [ + 'notCreatedAt' => 'Not createdAt value' + ], + ])) + ->getQuery() + ->getResult(); + } + + public function testFilterDateRangeWithOnlyFromParameterValue(): void + { + /** @var PostRepository $postRepository */ + $postRepository = $this->em->getRepository(Post::class); + + $firstDate = DateTimeImmutable::createFromFormat('Y-m-d H:i:s', '2020-01-01 13:30:00'); + $secondDate = DateTimeImmutable::createFromFormat('Y-m-d H:i:s', '2020-01-05 12:00:00'); + + $post = new Post( + $this->faker->name(), + $this->faker->text(), + $this->faker->boolean(), + $firstDate, + ); + + $post2 = new Post( + $this->faker->name(), + $this->faker->text(), + $this->faker->boolean(), + $secondDate, + ); + + $this->em->persist($post); + $this->em->persist($post2); + $this->em->flush(); + + $result = $postRepository->createQueryByFilter([ + 'createdAt' => DateRange::class, + ], new Request([ + HttpFilter::REQUEST_FILTER_KEY => [ + 'createdAt' => [ + 'from' => $secondDate->format('Y-m-d'), + ], + ], + ])) + ->getQuery() + ->getResult(); + + $this->assertNotEmpty($result); + $this->assertGreaterThanOrEqual(1, $result); + } + + public function testFilterDateRangeWithOnlyToParameterValue(): void + { + /** @var PostRepository $postRepository */ + $postRepository = $this->em->getRepository(Post::class); + + $firstDate = DateTimeImmutable::createFromFormat('Y-m-d H:i:s', '2020-01-01 13:30:00'); + $secondDate = DateTimeImmutable::createFromFormat('Y-m-d H:i:s', '2020-01-05 12:00:00'); + + $post = new Post( + $this->faker->name(), + $this->faker->text(), + $this->faker->boolean(), + $firstDate, + ); + + $post2 = new Post( + $this->faker->name(), + $this->faker->text(), + $this->faker->boolean(), + $secondDate, + ); + + $this->em->persist($post); + $this->em->persist($post2); + $this->em->flush(); + + $result = $postRepository->createQueryByFilter([ + 'createdAt' => DateRange::class, + ], new Request([ + HttpFilter::REQUEST_FILTER_KEY => [ + 'createdAt' => [ + 'to' => $firstDate->format('Y-m-d'), + ], + ], + ])) + ->getQuery() + ->getResult(); + + $this->assertNotEmpty($result); + $this->assertGreaterThanOrEqual(1, $result); + } } -- GitLab