'Subquery handling', 'description' => 'Tests for subqueries.', 'group' => 'ApacheSolr'); } function setUp() { parent::setUp('search', 'apachesolr'); } function testSubQueriesQuery() { $query1 = apachesolr_drupal_query('foo', '', '', TRUE); $query2 = apachesolr_drupal_query('bar'); $query3 = apachesolr_drupal_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_drupal_query('', 'uid:1 tid:5', '', TRUE); $query2 = apachesolr_drupal_query('', 'uid:10'); $query3 = apachesolr_drupal_query('', 'uid:2'); $query4 = apachesolr_drupal_query('', 'title:baz'); $query2->add_subquery($query1); $this->assertEqual($query2->get_url_querystring(), 'filters=uid:10 OR (uid:1 tid:5)', t('Sub-sub query')); $query3->add_subquery($query1, 'AND'); $this->assertEqual($query3->get_url_querystring(), 'filters=uid:2 AND (uid:1 tid:5)', t('Sub-sub query')); $query3->add_subquery($query4); $query3->remove_subquery($query1); $this->assertEqual($query3->get_url_querystring(), 'filters=uid:2 OR (title:baz)', t('Sub-sub query')); } // Test getting a query from the apachesolr_drupal_query factory function testStaticFactory() { $query1 = apachesolr_drupal_query('foo', '', '', TRUE); $query2 = apachesolr_drupal_query('bar', 'title:baz'); $query3 = apachesolr_drupal_query('', 'tid:5 uid:10'); $query2->add_subquery($query1); $query4 = apachesolr_drupal_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_drupal_query('bar', 'title:baz'); // same as $query2 $query5->add_subquery($query3); $query5->remove_subquery($query1); $this->assertEqual($query5->get_query_basic() .'?'. $query5->get_url_querystring(), 'bar?filters=title:baz OR (tid:5 uid:10)'); } }