Commit 7ef97085 authored by Bas de Nooijer's avatar Bas de Nooijer

improved test coverage and added support for select query config

parent 6ef67abf
...@@ -390,11 +390,15 @@ class Solarium_Query_Select extends Solarium_Query ...@@ -390,11 +390,15 @@ class Solarium_Query_Select extends Solarium_Query
/** /**
* Add a filter query * Add a filter query
* *
* @param Solarium_Query_Select_FilterQuery $filterQuery * @param Solarium_Query_Select_FilterQuery|array $filterQuery
* @return Solarium_Query Provides fluent interface * @return Solarium_Query Provides fluent interface
*/ */
public function addFilterQuery($filterQuery) public function addFilterQuery($filterQuery)
{ {
if (is_array($filterQuery)) {
$filterQuery = new Solarium_Query_Select_FilterQuery($filterQuery);
}
$key = $filterQuery->getKey(); $key = $filterQuery->getKey();
if (0 === strlen($key)) { if (0 === strlen($key)) {
...@@ -490,11 +494,16 @@ class Solarium_Query_Select extends Solarium_Query ...@@ -490,11 +494,16 @@ class Solarium_Query_Select extends Solarium_Query
/** /**
* Add a facet * Add a facet
* *
* @param Solarium_Query_Select_Facet $facet * @param Solarium_Query_Select_Facet|array $facet
* @return Solarium_Query Provides fluent interface * @return Solarium_Query Provides fluent interface
*/ */
public function addFacet($facet) public function addFacet($facet)
{ {
if (is_array($facet)) {
$className = 'Solarium_Query_Select_Facet_'.ucfirst($facet['type']);
$facet = new $className($facet);
}
$key = $facet->getKey(); $key = $facet->getKey();
if (0 === strlen($key)) { if (0 === strlen($key)) {
......
...@@ -77,6 +77,12 @@ class Solarium_Query_Select_FacetTest extends PHPUnit_Framework_TestCase ...@@ -77,6 +77,12 @@ class Solarium_Query_Select_FacetTest extends PHPUnit_Framework_TestCase
$this->_facet->setExcludes(array('e3','e4')); $this->_facet->setExcludes(array('e3','e4'));
$this->assertEquals(array('e3','e4'), $this->_facet->getExcludes()); $this->assertEquals(array('e3','e4'), $this->_facet->getExcludes());
} }
public function testConstructorWithConfig()
{
$this->_facet = new TestFacet(array('excludes' => array('e1','e2')));
$this->assertEquals(array('e1','e2'), $this->_facet->getExcludes());
}
} }
class TestFacet extends Solarium_Query_Select_Facet{ class TestFacet extends Solarium_Query_Select_Facet{
......
...@@ -340,5 +340,204 @@ class Solarium_Query_SelectTest extends PHPUnit_Framework_TestCase ...@@ -340,5 +340,204 @@ class Solarium_Query_SelectTest extends PHPUnit_Framework_TestCase
); );
} }
//TODO test facet methods public function testAddAndGetFacet()
{
$fq = new Solarium_Query_Select_Facet_Query;
$fq->setKey('f1')->setQuery('category:1');
$this->_query->addFacet($fq);
$this->assertEquals(
$fq,
$this->_query->getFacet('f1')
);
}
public function testAddFacetWithoutKey()
{
$fq = new Solarium_Query_Select_Facet_Query;
$fq->setQuery('category:1');
$this->setExpectedException('Solarium_Exception');
$this->_query->addFacet($fq);
}
public function testAddFacetWithUsedKey()
{
$fq1 = new Solarium_Query_Select_Facet_Query;
$fq1->setKey('f1')->setQuery('category:1');
$fq2 = new Solarium_Query_Select_Facet_Query;
$fq2->setKey('f1')->setQuery('category:2');
$this->_query->addFacetQuery($fq1);
$this->setExpectedException('Solarium_Exception');
$this->_query->addFacetQuery($fq2);
}
public function testGetInvalidFacet()
{
$this->assertEquals(
null,
$this->_query->getFacet('invalidtag')
);
}
public function testAddFacets()
{
$fq1 = new Solarium_Query_Select_Facet_Query;
$fq1->setKey('f1')->setQuery('category:1');
$fq2 = new Solarium_Query_Select_Facet_Query;
$fq2->setKey('f2')->setQuery('category:2');
$facets = array('f1' => $fq1, 'f2' => $fq2);
$this->_query->addFacets($facets);
$this->assertEquals(
$facets,
$this->_query->getFacets()
);
}
public function testRemoveFacet()
{
$fq1 = new Solarium_Query_Select_Facet_Query;
$fq1->setKey('f1')->setQuery('category:1');
$fq2 = new Solarium_Query_Select_Facet_Query;
$fq2->setKey('f2')->setQuery('category:2');
$facets = array('f1' => $fq1, 'f2' => $fq2);
$this->_query->addFacets($facets);
$this->_query->removeFacet('f1');
$this->assertEquals(
array('f2' => $fq2),
$this->_query->getFacets()
);
}
public function testRemoveInvalidFacet()
{
$fq1 = new Solarium_Query_Select_Facet_Query;
$fq1->setKey('f1')->setQuery('category:1');
$fq2 = new Solarium_Query_Select_Facet_Query;
$fq2->setKey('f2')->setQuery('category:2');
$facets = array('f1' => $fq1, 'f2' => $fq2);
$this->_query->addFacets($facets);
$this->_query->removeFacet('f3'); //continue silently
$this->assertEquals(
$facets,
$this->_query->getFacets()
);
}
public function testClearFacets()
{
$fq1 = new Solarium_Query_Select_Facet_Query;
$fq1->setKey('f1')->setQuery('category:1');
$fq2 = new Solarium_Query_Select_Facet_Query;
$fq2->setKey('f2')->setQuery('category:2');
$facets = array('f1' => $fq1, 'f2' => $fq2);
$this->_query->addFacets($facets);
$this->_query->clearFacets();
$this->assertEquals(
array(),
$this->_query->getFacets()
);
}
public function testSetFacets()
{
$fq1 = new Solarium_Query_Select_Facet_Query;
$fq1->setKey('f1')->setQuery('category:1');
$fq2 = new Solarium_Query_Select_Facet_Query;
$fq2->setKey('f2')->setQuery('category:2');
$facets = array('f1' => $fq1, 'f2' => $fq2);
$this->_query->addFacets($facets);
$fq3 = new Solarium_Query_Select_Facet_Query;
$fq3->setKey('f3')->setQuery('category:3');
$fq4 = new Solarium_Query_Select_Facet_Query;
$fq4->setKey('f4')->setQuery('category:4');
$facets = array('f3' => $fq3, 'f4' => $fq4);
$this->_query->setFacets($facets);
$this->assertEquals(
$facets,
$this->_query->getFacets()
);
}
public function testConstructorWithConfig()
{
$config = array(
'query' => 'text:mykeyword',
'sort' => array('score' => 'asc'),
'fields' => array('id','title','category'),
'rows' => 100,
'start' => 200,
'filterquery' => array(
array('key' => 'pub', 'tag' => array('pub'),'query' => 'published:true')
),
'facet' => array(
array('type' => 'field', 'key' => 'categories', 'field' => 'category'),
array('type' => 'query', 'key' => 'category13', 'query' => 'category:13')
),
);
$query = new Solarium_Query_Select($config);
$this->assertEquals(
$config['query'],
$query->getQuery()
);
$this->assertEquals(
$config['sort'],
$query->getSortFields()
);
$this->assertEquals(
$config['fields'],
$query->getFields()
);
$this->assertEquals(
$config['rows'],
$query->getRows()
);
$this->assertEquals(
$config['start'],
$query->getStart()
);
$fq = $query->getFilterQuery('pub');
$this->assertEquals(
'published:true',
$fq->getQuery()
);
$facets = $query->getFacets();
$this->assertEquals(
'category',
$facets['categories']->getField()
);
$this->assertEquals(
'category:13',
$facets['category13']->getQuery()
);
}
} }
...@@ -70,6 +70,11 @@ class Solarium_Result_SelectTest extends PHPUnit_Framework_TestCase ...@@ -70,6 +70,11 @@ class Solarium_Result_SelectTest extends PHPUnit_Framework_TestCase
$this->assertEquals($this->_facets['f2'], $this->_result->getFacet('f2')); $this->assertEquals($this->_facets['f2'], $this->_result->getFacet('f2'));
} }
public function testGetFacetByInvalidKey()
{
$this->assertEquals(null, $this->_result->getFacet('f2123123'));
}
public function testCount() public function testCount()
{ {
$this->assertEquals(3, $this->_result->count()); $this->assertEquals(3, $this->_result->count());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment