Skip to content

Commit dab2eb7

Browse files
toofffdunglas
authored andcommitted
Fix date filter (#1718)
* Fix date filter * Fix review for @dunglas * Adds tests for dateFilter
1 parent 04fe7d7 commit dab2eb7

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

src/Bridge/Doctrine/Orm/Filter/DateFilter.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ protected function filterProperty(string $property, $values, QueryBuilder $query
167167
protected function addWhere(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $alias, string $field, string $operator, string $value, string $nullManagement = null, $type = null)
168168
{
169169
try {
170-
$value = false !== strpos('_immutable', $type) ? new \DateTime($value) : new \DateTimeImmutable($value);
170+
$value = false === strpos($type, '_immutable') ? new \DateTime($value) : new \DateTimeImmutable($value);
171171
} catch (\Exception $e) {
172172
// Silently ignore this filter if it can not be transformed to a \DateTime
173173
$this->logger->notice('Invalid filter ignored', [

tests/Bridge/Doctrine/Orm/Filter/DateFilterTest.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGenerator;
1818
use ApiPlatform\Core\Tests\Fixtures\TestBundle\Entity\Dummy;
1919
use ApiPlatform\Core\Tests\Fixtures\TestBundle\Entity\DummyDate;
20+
use ApiPlatform\Core\Tests\Fixtures\TestBundle\Entity\DummyImmutableDate;
2021
use Doctrine\Common\Persistence\ManagerRegistry;
2122
use Doctrine\ORM\EntityRepository;
2223
use Symfony\Bridge\Doctrine\Test\DoctrineTestHelper;
@@ -103,6 +104,31 @@ public function testApplyDate()
103104

104105
$filter->apply($queryBuilder, new QueryNameGenerator(), DummyDate::class);
105106
$this->assertEquals(new \DateTime('2015-04-05'), $queryBuilder->getParameters()[0]->getValue());
107+
$this->assertInstanceOf(\DateTime::class, $queryBuilder->getParameters()[0]->getValue());
108+
}
109+
110+
public function testApplyDateImmutable()
111+
{
112+
$request = Request::create('/api/dummy_immutable_dates', 'GET', [
113+
'dummyDate' => [
114+
'after' => '2015-04-05',
115+
],
116+
]);
117+
$requestStack = new RequestStack();
118+
$requestStack->push($request);
119+
120+
$queryBuilder = $this->repository->createQueryBuilder('o');
121+
122+
$filter = new DateFilter(
123+
$this->managerRegistry,
124+
$requestStack,
125+
null,
126+
['dummyDate' => null]
127+
);
128+
129+
$filter->apply($queryBuilder, new QueryNameGenerator(), DummyImmutableDate::class);
130+
$this->assertEquals(new \DateTimeImmutable('2015-04-05'), $queryBuilder->getParameters()[0]->getValue());
131+
$this->assertInstanceOf(\DateTimeImmutable::class, $queryBuilder->getParameters()[0]->getValue());
106132
}
107133

108134
public function testGetDescription()

0 commit comments

Comments
 (0)