You are here

class DrupalSolrFilterSubQueryTests in Apache Solr Search 7

Same name and namespace in other branches
  1. 8 tests/solr_base_subquery.test \DrupalSolrFilterSubQueryTests
  2. 6.3 tests/solr_base_subquery.test \DrupalSolrFilterSubQueryTests

@file Unit tests for subquery object methods.

Hierarchy

Expanded class hierarchy of DrupalSolrFilterSubQueryTests

File

tests/solr_base_subquery.test, line 7
Unit tests for subquery object methods.

View source
class DrupalSolrFilterSubQueryTests extends DrupalUnitTestCase {
  public static function getInfo() {
    return array(
      'name' => 'SolrFilterSubQuery Unit tests',
      'description' => 'Unit Tests for subqueries.',
      'group' => 'ApacheSolr',
    );
  }
  function setUp() {
    parent::setUp();
    require_once dirname(dirname(realpath(__FILE__))) . '/apachesolr.module';
    require_once dirname(dirname(realpath(__FILE__))) . '/apachesolr.interface.inc';
    require_once dirname(dirname(realpath(__FILE__))) . '/Solr_Base_Query.php';
    require_once dirname(dirname(realpath(__FILE__))) . '/Drupal_Apache_Solr_Service.php';
    require_once dirname(dirname(realpath(__FILE__))) . '/tests/Dummy_Solr.php';
  }

  /**
   * Helper function to simulate the auto loading and other non-needed functions
   * that otherwise require a database
   * @see apachesolr_drupal_query().
   * @return SolrBaseQuery
   */
  private function _apachesolr_drupal_query($name, $params = array(), $solrsort = '', $base_path = '', $solr = NULL) {
    if (empty($solr)) {
      $solr = new DummySolr(NULL);
    }
    return new SolrBaseQuery($name, $solr, $params, $solrsort, $base_path);
  }
  private function _apachesolr_drupal_subquery($operator = 'OR', $exclude = FALSE) {
    return new SolrFilterSubQuery($operator, $exclude);
  }
  function testSubQueriesQuery() {
    $query1 = $this
      ->_apachesolr_drupal_query('DrupalTest');
    $query1
      ->addFilter('label', 'foo');
    $query2 = $this
      ->_apachesolr_drupal_subquery();
    $query2
      ->addFilter('label', 'bar');
    $query3 = $this
      ->_apachesolr_drupal_subquery();
    $query3
      ->addFilter('label', 'baz');
    $query1
      ->addFilterSubQuery($query2);
    $params = $query1
      ->getParam('fq');
    $this
      ->assertEqual($params[0], 'label:foo', t('First field should be label:foo'));
    $this
      ->assertEqual($params[1], '(label:bar)', t('Second field should be label:bar'));
    $query1
      ->removeFilterSubQuery($query2);
    $params = $query1
      ->getParam('fq');
    $this
      ->assertFalse(isset($params[1]), t('Second field should be empty'));
    $query1
      ->addFilterSubQuery($query2);
    $query1
      ->addFilterSubQuery($query2);
    $query1
      ->addFilterSubQuery($query2);
    $params = $query1
      ->getParam('fq');
    $this
      ->assertEqual($params[0], 'label:foo', t('First field should be label:foo'));
    $this
      ->assertEqual($params[1], '(label:bar)', t('Second field should be label:bar'));
    $this
      ->assertEqual(count($params), 2, t('Add bar several times; should only appear once.'));

    // Empty out query1
    $query1 = $this
      ->_apachesolr_drupal_query('DrupalTest');
    $query2 = $this
      ->_apachesolr_drupal_subquery('DrupalTest');
    $query2->operator = 'OR';
    $query2
      ->addFilter('label', 'bar');
    $query2
      ->addFilter('label', 'baz');
    $query1
      ->addFilterSubQuery($query2);
    $params = $query1
      ->getParam('fq');
    $this
      ->assertEqual($params[0], '(label:bar OR label:baz)', '(label:bar OR label:baz)');

    // Empty out query1
    $query1 = $this
      ->_apachesolr_drupal_query('DrupalTest');
    $query2 = $this
      ->_apachesolr_drupal_subquery('DrupalTest');
    $query2->operator = 'AND';
    $query2
      ->addFilter('label', 'bar');
    $query2
      ->addFilter('label', 'baz');
    $query1
      ->addFilterSubQuery($query2);
    $params = $query1
      ->getParam('fq');
    $this
      ->assertEqual($params[0], '(label:bar AND label:baz)', '(label:bar AND label:baz)');

    // Test with multiple filters in first query
    $query1 = $this
      ->_apachesolr_drupal_query('DrupalTest');
    $query1
      ->addFilter('is_uid', '10');
    $query2 = $this
      ->_apachesolr_drupal_subquery();
    $query2
      ->addFilter('is_uid', '1');
    $query2
      ->addFilter('tid', '5');
    $query1
      ->addFilterSubQuery($query2);
    $params = $query1
      ->getParam('fq');
    $this
      ->assertEqual($params[0], 'is_uid:10', 'First field value is is_uid:10');
    $this
      ->assertEqual($params[1], '(is_uid:1 OR tid:5)', 'Second field value is (is_uid:1 OR tid:5)');
    $query2->operator = 'AND';
    $query1
      ->addFilterSubQuery($query2);
    $params = $query1
      ->getParam('fq');
    $this
      ->assertEqual($params[0], 'is_uid:10', 'First field value is is_uid:10');
    $this
      ->assertEqual($params[1], '(is_uid:1 AND tid:5)', 'Second field value is (is_uid:1 AND tid:5)');

    // Test excluding a subquery.
    $query1 = $this
      ->_apachesolr_drupal_query('DrupalTest');
    $query2 = $this
      ->_apachesolr_drupal_subquery('AND', TRUE);
    $query2
      ->addFilter('label', 'bar');
    $query2
      ->addFilter('label', 'baz');
    $query1
      ->addFilterSubQuery($query2);
    $params = $query1
      ->getParam('fq');
    $this
      ->assertEqual($params[0], '-(label:bar AND label:baz)', t('The bar and baz label are excluded.'));

    // Test if a field is either empty or has a certain value.
    $query1 = $this
      ->_apachesolr_drupal_query('DrupalTest');
    $query2 = $this
      ->_apachesolr_drupal_subquery('AND', TRUE);
    $query2
      ->addFilter('label', '*');
    $query2
      ->addFilter('label', 'bar', TRUE);
    $query1
      ->addFilterSubQuery($query2);
    $params = $query1
      ->getParam('fq');

    // This subquery is useful when you want to retrieve empty
    // fields for the label property OR should be bar.
    $this
      ->assertEqual($params[0], '-(label:* AND -label:bar)', t('The label should either be bar or empty.'));
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DrupalSolrFilterSubQueryTests::getInfo public static function
DrupalSolrFilterSubQueryTests::setUp function Sets up unit test environment. Overrides DrupalUnitTestCase::setUp
DrupalSolrFilterSubQueryTests::testSubQueriesQuery function
DrupalSolrFilterSubQueryTests::_apachesolr_drupal_query private function Helper function to simulate the auto loading and other non-needed functions that otherwise require a database
DrupalSolrFilterSubQueryTests::_apachesolr_drupal_subquery private function
DrupalTestCase::$assertions protected property Assertions thrown in that test case.
DrupalTestCase::$databasePrefix protected property The database prefix of this test run.
DrupalTestCase::$originalFileDirectory protected property The original file directory, before it was changed for testing purposes.
DrupalTestCase::$results public property Current results of this test case.
DrupalTestCase::$setup protected property Flag to indicate whether the test has been set up.
DrupalTestCase::$setupDatabasePrefix protected property
DrupalTestCase::$setupEnvironment protected property
DrupalTestCase::$skipClasses protected property This class is skipped when looking for the source of an assertion.
DrupalTestCase::$testId protected property The test run ID.
DrupalTestCase::$timeLimit protected property Time limit for the test.
DrupalTestCase::$useSetupInstallationCache public property Whether to cache the installation part of the setUp() method.
DrupalTestCase::$useSetupModulesCache public property Whether to cache the modules installation part of the setUp() method.
DrupalTestCase::$verboseDirectoryUrl protected property URL to the verbose output file directory.
DrupalTestCase::assert protected function Internal helper: stores the assert.
DrupalTestCase::assertEqual protected function Check to see if two values are equal.
DrupalTestCase::assertFalse protected function Check to see if a value is false (an empty string, 0, NULL, or FALSE).
DrupalTestCase::assertIdentical protected function Check to see if two values are identical.
DrupalTestCase::assertNotEqual protected function Check to see if two values are not equal.
DrupalTestCase::assertNotIdentical protected function Check to see if two values are not identical.
DrupalTestCase::assertNotNull protected function Check to see if a value is not NULL.
DrupalTestCase::assertNull protected function Check to see if a value is NULL.
DrupalTestCase::assertTrue protected function Check to see if a value is not false (not an empty string, 0, NULL, or FALSE).
DrupalTestCase::deleteAssert public static function Delete an assertion record by message ID.
DrupalTestCase::error protected function Fire an error assertion. 1
DrupalTestCase::errorHandler public function Handle errors during test runs. 1
DrupalTestCase::exceptionHandler protected function Handle exceptions.
DrupalTestCase::fail protected function Fire an assertion that is always negative.
DrupalTestCase::generatePermutations public static function Converts a list of possible parameters into a stack of permutations.
DrupalTestCase::getAssertionCall protected function Cycles through backtrace until the first non-assertion method is found.
DrupalTestCase::getDatabaseConnection public static function Returns the database connection to the site running Simpletest.
DrupalTestCase::insertAssert public static function Store an assertion from outside the testing context.
DrupalTestCase::pass protected function Fire an assertion that is always positive.
DrupalTestCase::randomName public static function Generates a random string containing letters and numbers.
DrupalTestCase::randomString public static function Generates a random string of ASCII characters of codes 32 to 126.
DrupalTestCase::run public function Run all tests in this class.
DrupalTestCase::verbose protected function Logs a verbose message in a text file.
DrupalUnitTestCase::tearDown protected function 1
DrupalUnitTestCase::__construct function Constructor for DrupalUnitTestCase. Overrides DrupalTestCase::__construct