diff --git a/src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php b/src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php index dcdb3ab72..cd4d34902 100644 --- a/src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php +++ b/src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php @@ -35,6 +35,20 @@ class EntryFilterType extends AbstractType { $builder ->add('readingTime', NumberRangeFilterType::class, [ + 'apply_filter' => function (QueryInterface $filterQuery, $field, $values) { + $value = $values['value']; + + if (null === $value['left_number'][0] || null === $value['right_number'][0]) { + return; + } + + $min = (int) ($value['left_number'][0] * $this->user->getConfig()->getReadingSpeed()); + $max = (int) ($value['right_number'][0] * $this->user->getConfig()->getReadingSpeed()); + + $expression = $filterQuery->getExpr()->between($field, $min, $max); + + return $filterQuery->createCondition($expression); + }, 'label' => 'entry.filters.reading_time.label', ]) ->add('createdAt', DateRangeFilterType::class, [ diff --git a/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php b/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php index 1f9cfe534..8cdedfda3 100644 --- a/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php +++ b/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php @@ -60,6 +60,43 @@ class ConfigControllerTest extends WallabagCoreTestCase $this->assertContains('flashes.config.notice.config_saved', $alert[0]); } + public function testChangeReadingSpeed() + { + $this->logInAs('admin'); + $client = $this->getClient(); + + $crawler = $client->request('GET', '/unread/list'); + $form = $crawler->filter('button[id=submit-filter]')->form(); + $dataFilters = [ + 'entry_filter[readingTime][right_number]' => 22, + 'entry_filter[readingTime][left_number]' => 22, + ]; + $crawler = $client->submit($form, $dataFilters); + $this->assertCount(1, $crawler->filter('div[class=entry]')); + + // Change reading speed + $crawler = $client->request('GET', '/config'); + $form = $crawler->filter('button[id=config_save]')->form(); + $data = [ + 'config[reading_speed]' => '2', + ]; + $client->submit($form, $data); + + // Is the entry still available via filters? + $crawler = $client->request('GET', '/unread/list'); + $form = $crawler->filter('button[id=submit-filter]')->form(); + $crawler = $client->submit($form, $dataFilters); + $this->assertCount(0, $crawler->filter('div[class=entry]')); + + // Restore old configuration + $crawler = $client->request('GET', '/config'); + $form = $crawler->filter('button[id=config_save]')->form(); + $data = [ + 'config[reading_speed]' => '0.5', + ]; + $client->submit($form, $data); + } + public function dataForUpdateFailed() { return [ diff --git a/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php b/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php index 64ebd6318..df4c34cd8 100644 --- a/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php +++ b/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php @@ -462,8 +462,8 @@ class EntryControllerTest extends WallabagCoreTestCase $form = $crawler->filter('button[id=submit-filter]')->form(); $data = [ - 'entry_filter[readingTime][right_number]' => 11, - 'entry_filter[readingTime][left_number]' => 11, + 'entry_filter[readingTime][right_number]' => 22, + 'entry_filter[readingTime][left_number]' => 22, ]; $crawler = $client->submit($form, $data);