From 9cc5e454098e4b67232c83e54e0a3e973b0c8afd Mon Sep 17 00:00:00 2001 From: Daniel Siepmann Date: Wed, 26 Sep 2018 16:45:04 +0200 Subject: [PATCH] BUGFIX: Allow to define zero as valid filter value via TypoScript The configured filter is no longer filtered, it's up to the integrator to provide proper configuration. Therefore `0` is now a valid and respected filter value. Resolves: #163 --- Classes/Domain/Search/SearchService.php | 4 +-- Documentation/source/changelog.rst | 1 + ...-allow-zero-as-typoscript-filter-value.rst | 10 +++++++ .../Unit/Domain/Search/SearchServiceTest.php | 29 +++++++++---------- 4 files changed, 26 insertions(+), 18 deletions(-) create mode 100644 Documentation/source/changelog/20180926-163-allow-zero-as-typoscript-filter-value.rst diff --git a/Classes/Domain/Search/SearchService.php b/Classes/Domain/Search/SearchService.php index 1fc792e2..7c8beeb0 100644 --- a/Classes/Domain/Search/SearchService.php +++ b/Classes/Domain/Search/SearchService.php @@ -126,9 +126,7 @@ protected function addConfiguredFilters(SearchRequestInterface $searchRequest) ArrayUtility::mergeRecursiveWithOverrule( $filter, - $this->configuration->get('searching.filter'), - true, - false + $this->configuration->get('searching.filter') ); $searchRequest->setFilter($filter); diff --git a/Documentation/source/changelog.rst b/Documentation/source/changelog.rst index d6a2b095..2cad89f0 100644 --- a/Documentation/source/changelog.rst +++ b/Documentation/source/changelog.rst @@ -13,3 +13,4 @@ Changelog changelog/20180308-131-respect-page-cache-clear changelog/20180308-introduce-php70-type-hints changelog/20180306-120-facet-configuration + changelog/20180926-163-allow-zero-as-typoscript-filter-value diff --git a/Documentation/source/changelog/20180926-163-allow-zero-as-typoscript-filter-value.rst b/Documentation/source/changelog/20180926-163-allow-zero-as-typoscript-filter-value.rst new file mode 100644 index 00000000..860e1641 --- /dev/null +++ b/Documentation/source/changelog/20180926-163-allow-zero-as-typoscript-filter-value.rst @@ -0,0 +1,10 @@ +Bugfix 163 "It's not possible to configure a filter via TS with value 0 - zero" +=============================================================================== + +Prior to the change it was not possible to define a filter while searching, via +TypoScript, with the value `0`. `0` was filtered as empty value. + +Now the configured filter is no longer filtered, it's up to the integrator to provide +proper configuration. Therefore `0` is now a valid and respected filter value. + +See :issue:`163`. diff --git a/Tests/Unit/Domain/Search/SearchServiceTest.php b/Tests/Unit/Domain/Search/SearchServiceTest.php index 50c1f490..3b880768 100644 --- a/Tests/Unit/Domain/Search/SearchServiceTest.php +++ b/Tests/Unit/Domain/Search/SearchServiceTest.php @@ -167,7 +167,7 @@ public function configuredFilterAreAddedToRequestWithoutAnyFilter() /** * @test */ - public function configuredFilterAreAddedToRequestWithExistingFilter() + public function configuredFilterWithValueZeroAreAddedToRequestWithoutAnyFilter() { $this->configuration->expects($this->any()) ->method('getIfExists') @@ -176,29 +176,25 @@ public function configuredFilterAreAddedToRequestWithExistingFilter() $this->configuration->expects($this->any()) ->method('get') ->will($this->onConsecutiveCalls( - ['property' => 'something'], + ['property' => '0'], $this->throwException(new InvalidArgumentException) )); $this->connection->expects($this->once()) ->method('search') ->with($this->callback(function ($searchRequest) { - return $searchRequest->getFilter() === [ - 'anotherProperty' => 'anything', - 'property' => 'something', - ]; + return $searchRequest->getFilter() === ['property' => '0']; })) ->willReturn($this->getMockBuilder(SearchResultInterface::class)->getMock()); $searchRequest = new SearchRequest('SearchWord'); - $searchRequest->setFilter(['anotherProperty' => 'anything']); $this->subject->search($searchRequest); } /** * @test */ - public function nonConfiguredFilterIsNotChangingRequestWithExistingFilter() + public function configuredFilterAreAddedToRequestWithExistingFilter() { $this->configuration->expects($this->any()) ->method('getIfExists') @@ -206,12 +202,18 @@ public function nonConfiguredFilterIsNotChangingRequestWithExistingFilter() ->will($this->onConsecutiveCalls(null, null)); $this->configuration->expects($this->any()) ->method('get') - ->will($this->throwException(new InvalidArgumentException)); + ->will($this->onConsecutiveCalls( + ['property' => 'something'], + $this->throwException(new InvalidArgumentException) + )); $this->connection->expects($this->once()) ->method('search') ->with($this->callback(function ($searchRequest) { - return $searchRequest->getFilter() === ['anotherProperty' => 'anything']; + return $searchRequest->getFilter() === [ + 'anotherProperty' => 'anything', + 'property' => 'something', + ]; })) ->willReturn($this->getMockBuilder(SearchResultInterface::class)->getMock()); @@ -223,7 +225,7 @@ public function nonConfiguredFilterIsNotChangingRequestWithExistingFilter() /** * @test */ - public function emptyConfiguredFilterIsNotChangingRequestWithExistingFilter() + public function nonConfiguredFilterIsNotChangingRequestWithExistingFilter() { $this->configuration->expects($this->any()) ->method('getIfExists') @@ -231,10 +233,7 @@ public function emptyConfiguredFilterIsNotChangingRequestWithExistingFilter() ->will($this->onConsecutiveCalls(null, null)); $this->configuration->expects($this->any()) ->method('get') - ->will($this->onConsecutiveCalls( - ['anotherProperty' => ''], - $this->throwException(new InvalidArgumentException) - )); + ->will($this->throwException(new InvalidArgumentException)); $this->connection->expects($this->once()) ->method('search')