diff options
-rw-r--r-- | src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php | 11 | ||||
-rw-r--r-- | tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php | 20 |
2 files changed, 30 insertions, 1 deletions
diff --git a/src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php b/src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php index ee66c728..556578d1 100644 --- a/src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php +++ b/src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php | |||
@@ -3,6 +3,7 @@ | |||
3 | namespace Wallabag\CoreBundle\Form\Type; | 3 | namespace Wallabag\CoreBundle\Form\Type; |
4 | 4 | ||
5 | use Doctrine\ORM\EntityRepository; | 5 | use Doctrine\ORM\EntityRepository; |
6 | use Lexik\Bundle\FormFilterBundle\Filter\FilterOperands; | ||
6 | use Lexik\Bundle\FormFilterBundle\Filter\Query\QueryInterface; | 7 | use Lexik\Bundle\FormFilterBundle\Filter\Query\QueryInterface; |
7 | use Lexik\Bundle\FormFilterBundle\Filter\Form\Type\NumberRangeFilterType; | 8 | use Lexik\Bundle\FormFilterBundle\Filter\Form\Type\NumberRangeFilterType; |
8 | use Lexik\Bundle\FormFilterBundle\Filter\Form\Type\DateRangeFilterType; | 9 | use Lexik\Bundle\FormFilterBundle\Filter\Form\Type\DateRangeFilterType; |
@@ -33,7 +34,7 @@ class EntryFilterType extends AbstractType | |||
33 | $this->user = $tokenStorage->getToken() ? $tokenStorage->getToken()->getUser() : null; | 34 | $this->user = $tokenStorage->getToken() ? $tokenStorage->getToken()->getUser() : null; |
34 | 35 | ||
35 | if (null === $this->user || !is_object($this->user)) { | 36 | if (null === $this->user || !is_object($this->user)) { |
36 | return null; | 37 | return; |
37 | } | 38 | } |
38 | } | 39 | } |
39 | 40 | ||
@@ -41,6 +42,14 @@ class EntryFilterType extends AbstractType | |||
41 | { | 42 | { |
42 | $builder | 43 | $builder |
43 | ->add('readingTime', NumberRangeFilterType::class, [ | 44 | ->add('readingTime', NumberRangeFilterType::class, [ |
45 | 'left_number_options' => [ | ||
46 | 'condition_operator' => FilterOperands::OPERATOR_GREATER_THAN_EQUAL, | ||
47 | 'attr' => ['min' => 0], | ||
48 | ], | ||
49 | 'right_number_options' => [ | ||
50 | 'condition_operator' => FilterOperands::OPERATOR_LOWER_THAN_EQUAL, | ||
51 | 'attr' => ['min' => 0], | ||
52 | ], | ||
44 | 'apply_filter' => function (QueryInterface $filterQuery, $field, $values) { | 53 | 'apply_filter' => function (QueryInterface $filterQuery, $field, $values) { |
45 | $lower = $values['value']['left_number'][0]; | 54 | $lower = $values['value']['left_number'][0]; |
46 | $upper = $values['value']['right_number'][0]; | 55 | $upper = $values['value']['right_number'][0]; |
diff --git a/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php b/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php index 3eb6d47f..7db4cf1f 100644 --- a/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php +++ b/tests/Wallabag/CoreBundle/Controller/EntryControllerTest.php | |||
@@ -591,6 +591,26 @@ class EntryControllerTest extends WallabagCoreTestCase | |||
591 | $this->assertCount(1, $crawler->filter('div[class=entry]')); | 591 | $this->assertCount(1, $crawler->filter('div[class=entry]')); |
592 | } | 592 | } |
593 | 593 | ||
594 | public function testFilterOnReadingTimeWithNegativeValue() | ||
595 | { | ||
596 | $this->logInAs('admin'); | ||
597 | $client = $this->getClient(); | ||
598 | |||
599 | $crawler = $client->request('GET', '/unread/list'); | ||
600 | |||
601 | $form = $crawler->filter('button[id=submit-filter]')->form(); | ||
602 | |||
603 | $data = [ | ||
604 | 'entry_filter[readingTime][right_number]' => -22, | ||
605 | 'entry_filter[readingTime][left_number]' => -22, | ||
606 | ]; | ||
607 | |||
608 | $crawler = $client->submit($form, $data); | ||
609 | |||
610 | // forcing negative value results in no entry displayed | ||
611 | $this->assertCount(0, $crawler->filter('div[class=entry]')); | ||
612 | } | ||
613 | |||
594 | public function testFilterOnReadingTimeOnlyUpper() | 614 | public function testFilterOnReadingTimeOnlyUpper() |
595 | { | 615 | { |
596 | $this->logInAs('admin'); | 616 | $this->logInAs('admin'); |