diff --git a/changelog.md b/changelog.md index 6ebaf3e..21d3fc2 100644 --- a/changelog.md +++ b/changelog.md @@ -1,4 +1,8 @@ # Changelog +### v1.3.4 (13.12.2021) + +#bugfix findAcceptable filters returns empty results for empty filters and none empty id list in arguments + ### v1.3.3 (10.12.2021) Performance update diff --git a/composer.json b/composer.json index 3cca6ce..eff3db8 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,6 @@ { "name": "k-samuel/faceted-search", - "version": "1.3.3", + "version": "1.3.4", "type": "library", "description": "PHP Faceted search", "keywords": ["php","faceted search"], diff --git a/src/Search.php b/src/Search.php index a5b8a91..257c78f 100644 --- a/src/Search.php +++ b/src/Search.php @@ -156,6 +156,10 @@ private function findFilters(array $filters = [], array $inputRecords = [], bool $indexedFilters[$filter->getFieldName()] = $filter; } $filteredRecords = $this->findRecordsMap($indexedFilters, $input); + }else{ + if(!empty($input)){ + $filteredRecords = $this->findRecordsMap([], $input); + } } foreach ($facetsData as $filterName => $filterValues) { diff --git a/tests/unit/SearchTest.php b/tests/unit/SearchTest.php index 8a3d881..0aa908b 100644 --- a/tests/unit/SearchTest.php +++ b/tests/unit/SearchTest.php @@ -176,6 +176,42 @@ public function testGetAcceptableFiltersCount() $this->assertEquals($values, $acceptableFilters[$filter]); } } + public function testGetAcceptableFiltersCountLimit() + { + $records = [ + ['id' => 1, 'color' => 'black', 'size' => 7, 'group' => 'A'], + ['id' => 2, 'color' => 'black', 'size' => 8, 'group' => 'A'], + ['id' => 3, 'color' => 'white', 'size' => 7, 'group' => 'B'], + ['id' => 4, 'color' => 'yellow', 'size' => 7, 'group' => 'C'], + ['id' => 5, 'color' => 'black', 'size' => 7, 'group' => 'C'], + ]; + $index = new Index(); + foreach ($records as $item) { + $index->addRecord($item['id'], $item); + } + $facets = new Search($index); + + $acceptableFilters = $facets->findAcceptableFiltersCount([], [1, 2]); + + $expect = [ + 'color' => ['black' => 2], + 'size' => [7 => 1, 8 => 1], + 'group' => ['A' => 2], + ]; + foreach ($expect as $field => &$values) { + asort($values); + } + unset($values); + foreach ($acceptableFilters as $field => &$values) { + asort($values); + } + unset($values); + + foreach ($expect as $filter => $values) { + $this->assertArrayHasKey($filter, $acceptableFilters); + $this->assertEquals($values, $acceptableFilters[$filter]); + } + } public function testGetAcceptableFiltersCountMulty() {