diff --git a/module/VuFind/src/VuFind/Search/Solr/HierarchicalFacetHelper.php b/module/VuFind/src/VuFind/Search/Solr/HierarchicalFacetHelper.php index 632b7cd2c142b33b6eb887850822dab46bc7804e..1811658d1e2575aad63f1b16b3277b2c6cc7b4cf 100644 --- a/module/VuFind/src/VuFind/Search/Solr/HierarchicalFacetHelper.php +++ b/module/VuFind/src/VuFind/Search/Solr/HierarchicalFacetHelper.php @@ -308,7 +308,9 @@ class HierarchicalFacetHelper implements TranslatorAwareInterface ->getDisplayString(); } - list($level, $value) = explode('/', $item['value'], 2); + $parts = explode('/', $item['value'], 2); + $level = $parts[0]; + $value = $parts[1] ?? $item['value']; if (!is_numeric($level)) { $level = 0; } diff --git a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/HierarchicalFacetHelperTest.php b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/HierarchicalFacetHelperTest.php index 1404da45023d0f714d8de2afaf56f9800a71b24c..9df44506015690b2c0cafa2fd51545728d287139 100644 --- a/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/HierarchicalFacetHelperTest.php +++ b/module/VuFind/tests/unit-tests/src/VuFindTest/Search/Solr/HierarchicalFacetHelperTest.php @@ -100,6 +100,35 @@ class HierarchicalFacetHelperTest extends TestCase ] ]; + /** + * Invalid test input data. + * + * @var array + */ + protected $invalidFacetList = [ + [ + 'value' => 'Book', + 'displayText' => 'Book', + 'count' => 1000, + 'operator' => 'OR', + 'isApplied' => false + ], + [ + 'value' => 'AV', + 'displayText' => 'Audiovisual', + 'count' => 600, + 'operator' => 'OR', + 'isApplied' => false + ], + [ + 'value' => 'Audio', + 'displayText' => 'Sound', + 'count' => 400, + 'operator' => 'OR', + 'isApplied' => false + ], + ]; + /** * Hierarchical Facet Helper * @@ -255,6 +284,32 @@ class HierarchicalFacetHelperTest extends TestCase ); $this->assertEquals(true, $facetList[0]['children'][0]['isApplied']); } + + /** + * Tests for buildFacetArray with invalid values + * + * @return void + */ + public function testBuildFacetArrayInvalidValues() + { + // Test without active filters + $facetList = $this->helper + ->buildFacetArray('format', $this->invalidFacetList); + $this->assertEquals('Book', $facetList[0]['value']); + $this->assertEquals(0, $facetList[0]['level']); + $this->assertFalse($facetList[0]['isApplied']); + $this->assertFalse($facetList[0]['hasAppliedChildren']); + $this->assertEquals('AV', $facetList[1]['value']); + $this->assertEquals('Audio', $facetList[2]['value']); + + // Test with active filter + $facetList = $this->helper->buildFacetArray( + 'format', + $this->setApplied('Book', $facetList) + ); + $this->assertEquals('Book', $facetList[0]['value']); + $this->assertTrue($facetList[0]['isApplied']); + $this->assertFalse($facetList[0]['hasAppliedChildren']); } /**