diff -r 989d9e117586 -r e7384fb35f7a Tests/Services/SearchServiceTest.php --- a/Tests/Services/SearchServiceTest.php Mon Dec 26 22:53:50 2011 +0100 +++ b/Tests/Services/SearchServiceTest.php Mon Jan 23 00:48:55 2012 +0100 @@ -16,14 +16,36 @@ { protected $_container; + protected $_application; + protected $_kernel; + public function __construct() { - $kernel = new \AppKernel("test", true); - $kernel->boot(); - $this->_container = $kernel->getContainer(); + $this->_kernel = new \AppKernel("test", true); + $this->_kernel->boot(); + $this->_container = $this->_kernel->getContainer(); parent::__construct(); } + + protected function runConsole($command, Array $options = array()) + { + + $options["-e"] = "test"; + $options["-q"] = null; + $options = array_merge($options, array('command' => $command)); + return $this->_application->run(new \Symfony\Component\Console\Input\ArrayInput($options)); + } + + public function setUp() + { + $this->_application = new \Symfony\Bundle\FrameworkBundle\Console\Application($this->_kernel); + $this->_application->setAutoExit(false); + $this->runConsole("doctrine:schema:drop", array("--force" => true)); + $this->runConsole("wikitag:schema:create"); + $this->runConsole("cache:warmup"); + $this->runConsole("doctrine:fixtures:load"/*, array("--fixtures" => __DIR__ . "/../../../../../../../src/Company/BaseBundle/DataFixtures")*/); + } protected function get($service) { @@ -33,27 +55,122 @@ public function testTagCloud() { - $search_service = $this->get("wiki_tag.search"); - $result = $search_service->getTagCloud(30); + $result = $search_service->getTagCloud(4); $this->assertNotNull($result, "tag cloud should not be null"); - $this->assertLessThanOrEqual(30, count($result)); + $this->assertLessThanOrEqual(4, count($result)); + $this->assertEquals(4, count($result)); + + // 0->tag4,6 ; 0->tag3,5 ; 0->tag2,4 ; 0->tag1,2 + $expected = array('Tag1'=>2,'Tag2'=>4, 'Tag3'=>5, 'Tag4'=>6); + for ($i = 0; $i < 4; $i++) { + $tagname = "Tag".(4-$i); + $this->assertEquals($tagname,$result[$i]['label']); + $this->assertEquals($expected[$tagname],$result[$i]['nb_docs']); + } + } + + public function testTagCloudLimit() + { + $search_service = $this->get("wiki_tag.search"); + + $result = $search_service->getTagCloud(2); + + $this->assertNotNull($result, "tag cloud should not be null"); + $this->assertEquals(2, count($result)); + + $expected = array('Tag3'=>5, 'Tag4'=>6); + for ($i = 0; $i < 2; $i++) { + $tagname = "Tag".(4-$i); + $this->assertEquals($tagname,$result[$i]['label']); + $this->assertEquals($expected[$tagname],$result[$i]['nb_docs']); + } + + } public function testCompletion() { - $search_service = $this->get("wiki_tag.search"); $result = $search_service->completion("tag"); - $this->assertNotNull($result, "tag cloud should not be null"); + $this->assertNotNull($result, "completion should not be null"); $this->assertEquals(4, count($result)); + + foreach ($result as $tagname) { + $this->assertEquals(0,strpos($tagname,"tag")); + } } + public function testSearch() { + + $search_service = $this->get("wiki_tag.search"); + $result = $search_service->search("Suspendisse"); + + $this->assertNotNull($result, "search result should not be null"); + $this->assertEquals(1, count($result)); + foreach (array("_score","host_doc_id", "wikitag_doc_id", "wikitag_doc", "title", "description", "categories") as $key) { + $this->assertArrayHasKey($key,$result[0]); + $this->assertNotNull($result[0][$key]); + } + $this->assertTrue($result[0]['_score']>0); + $this->assertEquals("Lorem ipsum dolor sit amet", $result[0]['title']); + $this->assertTrue(is_a($result[0]['wikitag_doc'], "\IRI\Bundle\WikiTagBundle\Model\DocumentInterface")); + $this->assertEquals("Lorem ipsum dolor sit amet", $result[0]['wikitag_doc']->getTitle()); + + } + + public function testSearchCondition() { + + $search_service = $this->get("wiki_tag.search"); + $result = $search_service->search("ullamcorper"); + + $this->assertNotNull($result, "search result should not be null"); + $this->assertEquals(2, count($result)); + + $result = $search_service->search("ullamcorper", array("tagsStr"=>array("operator"=>"like","value"=>"barfoo"))); + + foreach (array("_score","host_doc_id", "wikitag_doc_id", "wikitag_doc", "title", "description", "categories") as $key) { + $this->assertArrayHasKey($key,$result[0]); + $this->assertNotNull($result[0][$key]); + } + $this->assertTrue($result[0]['_score']>0); + $this->assertEquals("Lorem ipsum dolor sit amet", $result[0]['title']); + $this->assertTrue(is_a($result[0]['wikitag_doc'], "\IRI\Bundle\WikiTagBundle\Model\DocumentInterface")); + $this->assertEquals("Lorem ipsum dolor sit amet", $result[0]['wikitag_doc']->getTitle()); + $this->assertEquals("Lorem ipsum ullamcorper", $result[0]['description']); + + } + + public function testSearchWeight() { + $search_service = $this->get("wiki_tag.search"); + + $result = $search_service->search(array('title'=>array('weight'=>0.9, 'value'=>'caveat'), 'description'=>array('weight'=>0.1, 'value'=>'caveat'))); + + $this->assertNotNull($result, "search result should not be null"); + $this->assertEquals(2, count($result)); + $this->assertTrue($result[0]['_score']>$result[1]['_score']); + + $this->assertEquals('caveat', $result[0]['title']); + $this->assertEquals('emptor', $result[0]['description']); + + $result = $search_service->search(array('title'=>array('weight'=>0.1, 'value'=>'caveat'), 'description'=>array('weight'=>0.9, 'value'=>'caveat'))); + + $this->assertNotNull($result, "search result should not be null"); + $this->assertEquals(2, count($result)); + $this->assertTrue($result[0]['_score']>$result[1]['_score']); + + $this->assertEquals('caveat', $result[0]['description']); + $this->assertEquals('emptor', $result[0]['title']); + + + } + + }