'Subquery handling', 'description' => 'Tests for subqueries.', 'group' => 'ApacheSolr'); } function setUp() { parent::setUp('search', 'apachesolr'); } function testSubQueriesQuery() { $query1 = apachesolr_current_query('foo', '', '', TRUE); $query2 = apachesolr_current_query('bar'); $query3 = apachesolr_current_query('baz'); $query1->add_subquery($query2); $this->assertEqual($query1->get_query_basic(), 'foo AND (bar)', 'foo AND (bar)'); $query1->remove_subquery($query2); $this->assertEqual($query1->get_query_basic(), 'foo', t('Remove bar query')); $query1->add_subquery($query2); $query1->add_subquery($query2); $query1->add_subquery($query2); $this->assertEqual($query1->get_query_basic(), 'foo AND (bar)', t('Add bar several times; should only appear once.')); $query1->remove_subquery($query2); $query1->add_subquery($query2, '', 'OR'); $this->assertEqual($query1->get_query_basic(), 'foo OR (bar)', 'foo OR (bar)'); $query1->add_subquery($query3); $query1->remove_subquery($query2); $this->assertEqual($query1->get_query_basic(), 'foo AND (baz)', 'foo AND (baz)'); } function testSubQueriesFilter() { $query1 = apachesolr_current_query('', 'uid:1 tid:5', '', TRUE); $query2 = apachesolr_current_query('', 'uid:10'); $query3 = apachesolr_current_query('', 'uid:2'); $query4 = apachesolr_current_query('', 'title:baz'); $query2->add_subquery($query1, 'OR'); $test1 = clone $query2; $query3->add_subquery($query1, 'AND'); $query3->add_subquery($query4); $test2 = clone $query3; $query3->remove_subquery($query1); $test3 = clone $query3; $tests = array( "filters=uid:10 (uid:1 OR tid:5)" => $test1, 'filters=uid:2 (uid:1 AND tid:5) (title:baz)' => $test2, 'filters=uid:2 (title:baz)' => $test3, ); foreach ($tests as $expected => $query_obj) { $got = $query_obj->get_url_querystring(); $this->assertEqual($got, $expected, t('SubQuery: Expected @expected, got @got',array('@expected' => $expected, '@got' => $got))); } } // Test getting a query from the apachesolr_current_query factory // @todo This test doesn't run properly so $query_foo->add_subquery($query_baz) // doesn't affects accordingly static $_queries array for the $query_foo index. // If it's 'by-design' then the test should be removed. /* function testStaticFactory() { $query1 = apachesolr_current_query('foo', '', '', TRUE); $query2 = apachesolr_current_query('bar', 'title:baz'); $query3 = apachesolr_current_query('', 'tid:5 uid:10'); $query2->add_subquery($query1); // $query2 should be 'bar AND (foo)?filters=title:baz' $query4 = apachesolr_current_query('bar', 'title:baz'); // same as $query2 $this->assertEqual($query4->get_query_basic() .'?'. $query4->get_url_querystring(), 'bar AND (foo)?filters=title:baz'); $query5 = apachesolr_current_query('bar', 'title:baz'); // same as $query2 $query5->add_subquery($query3); // $query5 should be 'bar AND (foo)?filters=title:baz (tid:5 OR uid:10)' $query5->remove_subquery($query1); // $query5 should be 'bar?filters=title:baz (tid:5 OR uid:10)' $this->assertEqual($query5->get_query_basic() .'?'. $query5->get_url_querystring(), 'bar?filters=title:baz (tid:5 OR uid:10)'); } */ }