solr_base_subquery.test 4.2 KB

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