_builder = new Solarium_Client_RequestBuilder_Select_Component_FacetSet; $this->_request = new Solarium_Client_Request(); $this->_component = new Solarium_Query_Select_Component_FacetSet(); } public function testBuildEmptyFacetSet() { $request = $this->_builder->buildComponent($this->_component, $this->_request); $this->assertEquals( array(), $request->getParams() ); } public function testBuildWithFacets() { $this->_component->addFacet(new Solarium_Query_Select_Component_Facet_Field(array('key' => 'f1', 'field' => 'owner'))); $this->_component->addFacet(new Solarium_Query_Select_Component_Facet_Query(array('key' => 'f2', 'query' => 'category:23'))); $this->_component->addFacet(new Solarium_Query_Select_Component_Facet_MultiQuery(array('key' => 'f3', 'query' => array('f4' => array('query' => 'category:40'))))); $request = $this->_builder->buildComponent($this->_component, $this->_request); $this->assertEquals( null, $request->getRawData() ); $this->assertEquals( '?facet=true&facet.field={!key=f1}owner&facet.query={!key=f2}category:23&facet.query={!key=f4}category:40', urldecode($request->getUri()) ); } public function testBuildWithRangeFacet() { $this->_component->addFacet(new Solarium_Query_Select_Component_Facet_Range( array( 'key' => 'f1', 'field' => 'price', 'start' => '1', 'end' => 100, 'gap' => 10, 'other' => 'all', 'include' => 'outer' ) )); $request = $this->_builder->buildComponent($this->_component, $this->_request); $this->assertEquals( null, $request->getRawData() ); $this->assertEquals( '?facet=true&facet.range={!key=f1}price&f.price.facet.range.start=1&f.price.facet.range.end=100&f.price.facet.range.gap=10&f.price.facet.range.other=all&f.price.facet.range.include=outer', urldecode($request->getUri()) ); } public function testBuildWithRangeFacetExcludingOptionalParams() { $this->_component->addFacet(new Solarium_Query_Select_Component_Facet_Range( array( 'key' => 'f1', 'field' => 'price', 'start' => '1', 'end' => 100, 'gap' => 10, ) )); $request = $this->_builder->buildComponent($this->_component, $this->_request); $this->assertEquals( null, $request->getRawData() ); $this->assertEquals( '?facet=true&facet.range={!key=f1}price&f.price.facet.range.start=1&f.price.facet.range.end=100&f.price.facet.range.gap=10', urldecode($request->getUri()) ); } public function testBuildWithFacetsAndGlobalFacetSettings() { $this->_component->setMissing(true); $this->_component->setLimit(10); $this->_component->addFacet(new Solarium_Query_Select_Component_Facet_Field(array('key' => 'f1', 'field' => 'owner'))); $this->_component->addFacet(new Solarium_Query_Select_Component_Facet_Query(array('key' => 'f2', 'query' => 'category:23'))); $this->_component->addFacet(new Solarium_Query_Select_Component_Facet_MultiQuery(array('key' => 'f3', 'query' => array('f4' =>array('query' => 'category:40'))))); $request = $this->_builder->buildComponent($this->_component, $this->_request); $this->assertEquals( null, $request->getRawData() ); $this->assertEquals( '?facet=true&facet.missing=true&facet.limit=10&facet.field={!key=f1}owner&facet.query={!key=f2}category:23&facet.query={!key=f4}category:40', urldecode($request->getUri()) ); } public function testBuildUnknownFacetType() { $this->_component->addFacet(new UnknownFacet(array('key' => 'f1', 'field' => 'owner'))); $this->setExpectedException('Solarium_Exception'); $request = $this->_builder->buildComponent($this->_component, $this->_request); $request->getUri(); } } class UnknownFacet extends Solarium_Query_Select_Component_Facet_Field{ public function getType() { return 'unknown'; } }