INFRA-132 - FunctionDeclarationArgumentSpacing.SpaceBeforeEquals
[civicrm-core.git] / tests / phpunit / CRM / Contact / BAO / QueryTest.php
index de449036a5895d1145270a9042a67f8e845402df..e4fb4130fe3222d582a18c370de8a518374f8232 100644 (file)
@@ -6,23 +6,19 @@ require_once 'CiviTest/Contact.php';
  *  Include dataProvider for tests
  */
 class CRM_Contact_BAO_QueryTest extends CiviUnitTestCase {
-  function get_info() {
-    return array(
-      'name' => 'Contact BAO Query',
-      'description' => 'Test all Contact_BAO_Query methods.',
-      'group' => 'CiviCRM BAO Query Tests',
-    );
-  }
 
+  /**
+   * @return CRM_Contact_BAO_QueryTestDataProvider
+   */
   public function dataProvider() {
     return new CRM_Contact_BAO_QueryTestDataProvider;
   }
 
-  function setUp() {
+  public function setUp() {
     parent::setUp();
   }
 
-  function tearDown() {
+  public function tearDown() {
     $tablesToTruncate = array(
       'civicrm_group_contact',
       'civicrm_group',
@@ -36,12 +32,12 @@ class CRM_Contact_BAO_QueryTest extends CiviUnitTestCase {
 
   /**
    *  Test CRM_Contact_BAO_Query::searchQuery()
-   *  @dataProvider dataProvider
+   * @dataProvider dataProvider
    */
-  function testSearch($fv, $count, $ids, $full) {
+  public function testSearch($fv, $count, $ids, $full) {
     $op = new PHPUnit_Extensions_Database_Operation_Insert();
     $op->execute($this->_dbconn,
-      new PHPUnit_Extensions_Database_DataSet_FlatXMLDataSet(
+      $this->createFlatXMLDataSet(
         dirname(__FILE__) . '/queryDataset.xml'
       )
     );
@@ -64,5 +60,117 @@ class CRM_Contact_BAO_QueryTest extends CiviUnitTestCase {
 
     $this->assertEquals($ids, $contacts, 'In line ' . __LINE__);
   }
-}
 
+  /**
+   * Check that we get a successful result querying for home address
+   * CRM-14263 search builder failure with search profile & address in criteria
+   */
+  public function testSearchProfileHomeCityCRM14263() {
+    $contactID = $this->individualCreate();
+    CRM_Core_Config::singleton()->defaultSearchProfileID = 1;
+    $this->callAPISuccess('address', 'create', array('contact_id' => $contactID, 'city' => 'Cool City', 'location_type_id' => 1));
+    $params = array(
+      0 => array(
+        0 => 'city-1',
+        1 => '=',
+        2 => 'Cool City',
+        3 => 1,
+        4 => 0,
+      ),
+    );
+    $returnProperties = array(
+      'contact_type' => 1,
+      'contact_sub_type' => 1,
+      'sort_name' => 1,
+    );
+
+    $queryObj = new CRM_Contact_BAO_Query($params, $returnProperties);
+    try {
+      $resultDAO = $queryObj->searchQuery(0, 0, NULL,
+        FALSE, FALSE,
+        FALSE, FALSE,
+        FALSE);
+      $this->assertTrue($resultDAO->fetch());
+    }
+    catch (PEAR_Exception $e) {
+      $err = $e->getCause();
+      $this->fail('invalid SQL created' . $e->getMessage() . " " . $err->userinfo);
+
+    }
+  }
+
+  /**
+   * Check that we get a successful result querying for home address
+   * CRM-14263 search builder failure with search profile & address in criteria
+   */
+  public function testSearchProfileHomeCityNoResultsCRM14263() {
+    $contactID = $this->individualCreate();
+    CRM_Core_Config::singleton()->defaultSearchProfileID = 1;
+    $this->callAPISuccess('address', 'create', array('contact_id' => $contactID, 'city' => 'Cool City', 'location_type_id' => 1));
+    $params = array(
+      0 => array(
+        0 => 'city-1',
+        1 => '=',
+        2 => 'Dumb City',
+        3 => 1,
+        4 => 0,
+      ),
+    );
+    $returnProperties = array(
+      'contact_type' => 1,
+      'contact_sub_type' => 1,
+      'sort_name' => 1,
+    );
+
+    $queryObj = new CRM_Contact_BAO_Query($params, $returnProperties);
+    try {
+      $resultDAO = $queryObj->searchQuery(0, 0, NULL,
+        FALSE, FALSE,
+        FALSE, FALSE,
+        FALSE);
+      $this->assertFalse($resultDAO->fetch());
+    }
+    catch (PEAR_Exception $e) {
+      $err = $e->getCause();
+      $this->fail('invalid SQL created' . $e->getMessage() . " " . $err->userinfo);
+
+    }
+  }
+  /**
+   * CRM-14263 search builder failure with search profile & address in criteria
+   * We are retrieving primary here - checking the actual sql seems super prescriptive - but since the massive query object has
+   * so few tests detecting any change seems good here :-)
+   */
+  public function testSearchProfilePrimaryCityCRM14263() {
+    $contactID = $this->individualCreate();
+    CRM_Core_Config::singleton()->defaultSearchProfileID = 1;
+    $this->callAPISuccess('address', 'create', array('contact_id' => $contactID, 'city' => 'Cool City', 'location_type_id' => 1));
+    $params = array(
+        0 => array(
+          0 => 'city',
+          1 => '=',
+          2 => 'Cool City',
+          3 => 1,
+          4 => 0,
+        ),
+      );
+    $returnProperties = array(
+        'contact_type' => 1,
+        'contact_sub_type' => 1,
+        'sort_name' => 1,
+      );
+    $expectedSQL = "SELECT contact_a.id as contact_id, contact_a.contact_type  as `contact_type`, contact_a.contact_sub_type  as `contact_sub_type`, contact_a.sort_name  as `sort_name`, civicrm_address.id as address_id, civicrm_address.city as `city`  FROM civicrm_contact contact_a LEFT JOIN civicrm_address ON ( contact_a.id = civicrm_address.contact_id AND civicrm_address.is_primary = 1 ) WHERE  (  ( LOWER(civicrm_address.city) = 'cool city' )  )  AND (contact_a.is_deleted = 0)    ORDER BY contact_a.sort_name asc, contact_a.id ";
+    $queryObj = new CRM_Contact_BAO_Query($params, $returnProperties);
+    try {
+      $this->assertEquals($expectedSQL, $queryObj->searchQuery(0, 0, NULL,
+          FALSE, FALSE,
+          FALSE, FALSE,
+          TRUE));
+    }
+    catch (PEAR_Exception $e) {
+      $err = $e->getCause();
+      $this->fail('invalid SQL created' . $e->getMessage() . " " . $err->userinfo);
+
+    }
+  }
+}