comparison sites/all/modules/custom/solrconnect/tests/solr_base_subquery.test @ 0:015d06b10d37 default tip

initial
author dwinter
date Wed, 31 Jul 2013 13:49:13 +0200
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:015d06b10d37
1 <?php
2
3 /**
4 * @file
5 * Unit tests for subquery object methods.
6 */
7 class DrupalSolrFilterSubQueryTests extends DrupalUnitTestCase {
8
9 public static function getInfo() {
10 return array(
11 'name' => 'SolrFilterSubQuery Unit tests',
12 'description' => 'Unit Tests for subqueries.',
13 'group' => 'ApacheSolr',
14 );
15 }
16
17 function setUp() {
18 parent::setUp();
19 require_once dirname(dirname(realpath(__FILE__))) . '/apachesolr.module';
20 require_once dirname(dirname(realpath(__FILE__))) . '/apachesolr.interface.inc';
21 require_once dirname(dirname(realpath(__FILE__))) . '/Solr_Base_Query.php';
22 require_once dirname(dirname(realpath(__FILE__))) . '/Drupal_Apache_Solr_Service.php';
23 require_once dirname(dirname(realpath(__FILE__))) . '/tests/Dummy_Solr.php';
24 }
25
26 /**
27 * Helper function to simulate the auto loading and other non-needed functions
28 * that otherwise require a database
29 * @see apachesolr_drupal_query().
30 * @return SolrBaseQuery
31 */
32 private function _apachesolr_drupal_query($name, $params = array(), $solrsort = '', $base_path = '', $solr = NULL) {
33 if (empty($solr)) {
34 $solr = new DummySolr(NULL);
35 }
36 return new SolrBaseQuery($name, $solr, $params, $solrsort, $base_path);
37 }
38
39 private function _apachesolr_drupal_subquery($operator = 'OR') {
40 return new SolrFilterSubQuery($operator);
41 }
42
43 function testSubQueriesQuery() {
44 $query1 = $this->_apachesolr_drupal_query('DrupalTest');
45 $query1->addFilter('label', 'foo');
46
47 $query2 = $this->_apachesolr_drupal_subquery();
48 $query2->addFilter('label', 'bar');
49
50 $query3 = $this->_apachesolr_drupal_subquery();
51 $query3->addFilter('label', 'baz');
52
53 $query1->addFilterSubQuery($query2);
54 $params = $query1->getParam('fq');
55 $this->assertEqual($params[0], 'label:foo', t('First field should be label:foo'));
56 $this->assertEqual($params[1], '(label:bar)', t('Second field should be label:bar'));
57
58 $query1->removeFilterSubQuery($query2);
59 $params = $query1->getParam('fq');
60 $this->assertFalse(isset($params[1]), t('Second field should be empty'));
61
62 $query1->addFilterSubQuery($query2);
63 $query1->addFilterSubQuery($query2);
64 $query1->addFilterSubQuery($query2);
65 $params = $query1->getParam('fq');
66 $this->assertEqual($params[0], 'label:foo', t('First field should be label:foo'));
67 $this->assertEqual($params[1], '(label:bar)', t('Second field should be label:bar'));
68 $this->assertEqual(count($params), 2, t('Add bar several times; should only appear once.'));
69
70 // Empty out query1
71 $query1 = $this->_apachesolr_drupal_query('DrupalTest');
72 $query2 = $this->_apachesolr_drupal_subquery('DrupalTest');
73 $query2->operator = 'OR';
74 $query2->addFilter('label', 'bar');
75 $query2->addFilter('label', 'baz');
76 $query1->addFilterSubQuery($query2);
77 $params = $query1->getParam('fq');
78 $this->assertEqual($params[0], '(label:bar OR label:baz)', '(label:bar OR label:baz)');
79
80 // Empty out query1
81 $query1 = $this->_apachesolr_drupal_query('DrupalTest');
82 $query2 = $this->_apachesolr_drupal_subquery('DrupalTest');
83 $query2->operator = 'AND';
84 $query2->addFilter('label', 'bar');
85 $query2->addFilter('label', 'baz');
86 $query1->addFilterSubQuery($query2);
87 $params = $query1->getParam('fq');
88 $this->assertEqual($params[0], '(label:bar AND label:baz)', '(label:bar AND label:baz)');
89
90 // Test with multiple filters in first query
91 $query1 = $this->_apachesolr_drupal_query('DrupalTest');
92 $query1->addFilter('is_uid', '10');
93
94 $query2 = $this->_apachesolr_drupal_subquery();
95 $query2->addFilter('is_uid', '1');
96 $query2->addFilter('tid', '5');
97 $query1->addFilterSubQuery($query2);
98
99 $params = $query1->getParam('fq');
100 $this->assertEqual($params[0], 'is_uid:10', 'First field value is is_uid:10');
101 $this->assertEqual($params[1], '(is_uid:1 OR tid:5)', 'Second field value is (is_uid:1 OR tid:5)');
102
103 $query2->operator = 'AND';
104 $query1->addFilterSubQuery($query2);
105 $params = $query1->getParam('fq');
106 $this->assertEqual($params[0], 'is_uid:10', 'First field value is is_uid:10');
107 $this->assertEqual($params[1], '(is_uid:1 AND tid:5)', 'Second field value is (is_uid:1 AND tid:5)');
108 }
109 }