You are here

function SolrBaseQueryTests::testParseFilters in Apache Solr Search 7

Same name and namespace in other branches
  1. 8 tests/solr_base_query.test \SolrBaseQueryTests::testParseFilters()
  2. 6.3 tests/solr_base_query.test \SolrBaseQueryTests::testParseFilters()

Test ordering of parsed filter positions.

Regression test for http://drupal.org/node/891962

File

tests/solr_base_query.test, line 46

Class

SolrBaseQueryTests
Unit tests for query object methods.

Code

function testParseFilters() {
  $fq = array(
    'tid:3',
    'sort_label:hello',
    'tid:11',
    'tid:1',
    'tid:12',
    'label:hello',
  );

  // Setup dummy Solr object.
  $query = $this
    ->_apachesolr_drupal_query("apachesolr_tests", array(
    'q' => 'mykeys',
    'fq' => $fq,
  ), 'sort_label asc', 'search/test');

  // Check setSolrSort().
  $this
    ->assertEqual(array(
    'solrsort' => 'sort_label asc',
  ), $query
    ->getSolrsortUrlQuery());
  $query
    ->setSolrsort('sort_name', 'desc');
  $this
    ->assertEqual(array(
    'solrsort' => 'sort_name desc',
  ), $query
    ->getSolrsortUrlQuery());
  $query
    ->setSolrsort('score', 'desc');
  $this
    ->assertEqual(array(), $query
    ->getSolrsortUrlQuery());

  // We cannot set a sort if the sort was not made available.
  $query
    ->setSolrsort('geodist()', 'asc');
  $this
    ->assertNotEqual(array(
    'solrsort' => 'geodist() asc',
  ), $query
    ->getSolrsortUrlQuery(), t('Sort was not applied as it was not available'));

  // Set the sort after it was made available.
  $query
    ->setAvailableSort('geodist()', array(
    'title' => 'Distance',
    'default' => 'asc',
  ));
  $query
    ->setSolrsort('geodist()', 'asc');
  $this
    ->assertEqual(array(
    'solrsort' => 'geodist() asc',
  ), $query
    ->getSolrsortUrlQuery());

  // Check escaping of the setSolrSort functinality
  // Check getPath() functionality
  $this
    ->assertEqual('search/test/mykeys', $query
    ->getPath());
  $this
    ->assertEqual('search/test/newkeys', $query
    ->getPath('newkeys'));

  // Check hasFilter functionality
  $this
    ->assertFalse($query
    ->hasFilter('label', 'Jello'), "hasFilter('label', 'Jello') is FALSE");
  $this
    ->assertTrue($query
    ->hasFilter('label', 'hello'), "hasFilter('label', 'hello') is TRUE");
  $this
    ->assertTrue($query
    ->hasFilter('label', 'hello', FALSE), "hasFilter('label', 'hello', FALSE) is TRUE");
  $this
    ->assertFalse($query
    ->hasFilter('label', 'hello', TRUE), "hasFilter('label', 'hello', TRUE) is FALSE");
  $filters = $query
    ->getFilters();
  $this
    ->assertEqual(count($filters), 6, count($filters) . ' filters found, expected 6 filters');

  // Check positions of filters
  foreach ($fq as $idx => $filter) {
    $this
      ->assertEqual($filter, $query
      ->makeFilterQuery($filters[$idx]));
  }

  // Check that the query string is re-assembled correctly
  $this
    ->assertEqual($fq, $query
    ->getParam('fq'));
  $this
    ->assertEqual('mykeys', $query
    ->getParam('q'));
  $query
    ->removeFilter('tid', '11');
  $filters = $query
    ->getFilters();
  $this
    ->assertEqual(count($filters), 5, count($filters) . ' filters found, expected 5 filters');
  $this
    ->assertEqual(array(
    'tid:3',
    'sort_label:hello',
    'tid:1',
    'tid:12',
    'label:hello',
  ), $query
    ->getParam('fq'));
  $query
    ->removeFilter('tid');
  $filters = $query
    ->getFilters();
  $this
    ->assertEqual(count($filters), 2, count($filters) . ' filters found, expected 2 filters');
  $this
    ->assertEqual(array(
    'sort_label:hello',
    'label:hello',
  ), $query
    ->getParam('fq'));
  $subquery = $this
    ->_apachesolr_drupal_subquery();
  $subquery
    ->addFilter('access__all', 0);
  $subquery
    ->addFilter('hash', 'randomhash');
  $query
    ->addFilterSubQuery($subquery);
  $this
    ->assertEqual(count($query
    ->getParam('fq')), 3, count($query
    ->getParam('fq')) . ' fq params found, expected 3 after adding subquery');
  $this
    ->assertEqual(array(
    'sort_label:hello',
    'label:hello',
    '(access__all:0 OR hash:randomhash' . ')',
  ), $query
    ->getParam('fq'));
}