CRM-14446 contact.get api tests + fix on date filters
authorEileen <eileen@fuzion.co.nz>
Wed, 9 Apr 2014 03:57:51 +0000 (03:57 +0000)
committerEileen McNaughton <eileen@fuzion.co.nz>
Wed, 9 Apr 2014 04:10:40 +0000 (16:10 +1200)
----------------------------------------
* CRM-14446: Contact.get api - birth_date & deceased_date fixes
  https://issues.civicrm.org/jira/browse/CRM-14446

api/v3/utils.php
tests/phpunit/api/v3/ContactTest.php

index 2312c043aab84480b3e6a1c62b2228a03d4d6782..fbfa481098e87c038705c0732f877d96e60dd271 100644 (file)
@@ -463,7 +463,6 @@ function _civicrm_api3_get_using_query_object($entity, $params, $additional_opti
 
   }
   $skipPermissions = CRM_Utils_Array::value('check_permissions', $params)? 0 :1;
-
   list($entities, $options) = CRM_Contact_BAO_Query::apiQuery(
     $newParams,
     $returnProperties,
@@ -1262,7 +1261,8 @@ function _civicrm_api3_validate_date(&$params, &$fieldName, &$fieldInfo) {
     if (strtotime($params[$fieldInfo['name']]) === FALSE) {
       throw new Exception($fieldInfo['name'] . " is not a valid date: " . $params[$fieldInfo['name']]);
     }
-    $params[$fieldInfo['name']] = CRM_Utils_Date::processDate($params[$fieldInfo['name']]);
+    $format = ($fieldInfo['type'] == 4) ? 'Ymd000000' : 'YmdHis';
+    $params[$fieldInfo['name']] = CRM_Utils_Date::processDate($params[$fieldInfo['name']], NULL, FALSE, $format);
   }
   if ((CRM_Utils_Array::value('name', $fieldInfo) != $fieldName) && CRM_Utils_Array::value($fieldName, $params)) {
     //If the unique field name differs from the db name & is set handle it here
index 7c1ef06a8fb4f4570ef82f6719e79ff77e8970cf..e7ca3fd241df3954f70d7d4116b36542fe0c816b 100644 (file)
@@ -1208,6 +1208,52 @@ class api_v3_ContactTest extends CiviUnitTestCase {
     $this->callAPISuccess('contact', 'delete', $contact);
   }
 
+  /**
+   *  Test birthdate params incl value, array & birth_date_high, birthdate_low
+   *  && deceased
+   */
+  public function testContactGetBirthdate() {
+    $date = date('d M', strtotime('+ 2 days'));
+    $contact1 = $this->callAPISuccess('contact', 'create', array_merge($this->_params, array('birth_date' => 'first day of next month - 2 years')));
+    $contact2 = $this->callAPISuccess('contact', 'create', array_merge($this->_params, array('birth_date' => 'first day of  next month - 5 years')));
+    $contact3 = $this->callAPISuccess('contact', 'create', array_merge($this->_params, array('birth_date' => 'first day of next month -20 years')));
+
+    $result = $this->callAPISuccess('contact', 'get', array());
+    $this->assertEquals(date('Y-m-d', strtotime('first day of next month -2 years')), $result['values'][$contact1['id']]['birth_date']);
+    $result = $this->callAPISuccess('contact', 'get', array('birth_date' => 'first day of next month -5 years'));
+    $this->assertEquals(1, $result['count']);
+    $this->assertEquals(date('Y-m-d', strtotime('first day of next month -5 years')), $result['values'][$contact2['id']]['birth_date']);
+    $result = $this->callAPISuccess('contact', 'get', array('birth_date_high' => date('Y-m-d', strtotime('-6 years'))));
+    $this->assertEquals(1, $result['count']);
+    $this->assertEquals(date('Y-m-d', strtotime('first day of next month -20 years')), $result['values'][$contact3['id']]['birth_date']);
+    $result = $this->callAPISuccess('contact', 'get', array('birth_date_low' => date('Y-m-d', strtotime('-6 years')), 'birth_date_high' => date('Y-m-d', strtotime('- 3 years'))));
+    $this->assertEquals(1, $result['count']);
+    $this->assertEquals(date('Y-m-d', strtotime('first day of next month -5 years')), $result['values'][$contact2['id']]['birth_date']);
+  }
+
+  /**
+   *  Test Deceaseddate params incl value, array & Deceased_date_high, Deceaseddate_low
+   *  && deceased
+   */
+  public function testContactGetDeceaseddate() {
+    $date = date('d M', strtotime('+ 2 days'));
+    $contact1 = $this->callAPISuccess('contact', 'create', array_merge($this->_params, array('deceased_date' => 'first day of next month - 2 years')));
+    $contact2 = $this->callAPISuccess('contact', 'create', array_merge($this->_params, array('deceased_date' => 'first day of  next month - 5 years')));
+    $contact3 = $this->callAPISuccess('contact', 'create', array_merge($this->_params, array('deceased_date' => 'first day of next month -20 years')));
+
+    $result = $this->callAPISuccess('contact', 'get', array());
+    $this->assertEquals(date('Y-m-d', strtotime('first day of next month -2 years')), $result['values'][$contact1['id']]['deceased_date']);
+    $result = $this->callAPISuccess('contact', 'get', array('deceased_date' => 'first day of next month -5 years'));
+    $this->assertEquals(1, $result['count']);
+    $this->assertEquals(date('Y-m-d', strtotime('first day of next month -5 years')), $result['values'][$contact2['id']]['deceased_date']);
+    $result = $this->callAPISuccess('contact', 'get', array('deceased_date_high' => date('Y-m-d', strtotime('-6 years'))));
+    $this->assertEquals(1, $result['count']);
+    $this->assertEquals(date('Y-m-d', strtotime('first day of next month -20 years')), $result['values'][$contact3['id']]['deceased_date']);
+    $result = $this->callAPISuccess('contact', 'get', array('deceased_date_low' => date('Y-m-d', strtotime('-6 years')), 'deceased_date_high' => date('Y-m-d', strtotime('- 3 years'))));
+    $this->assertEquals(1, $result['count']);
+    $this->assertEquals(date('Y-m-d', strtotime('first day of next month -5 years')), $result['values'][$contact2['id']]['deceased_date']);
+  }
+
   /**
    * Test for Contact.get id=@user:username
    */