CRM-19956: Fix case getlist api with 'id' and 'case_id' param
authorjitendrapurohit <jitendra.purohit@webaccessglobal.com>
Thu, 2 Feb 2017 11:24:39 +0000 (16:54 +0530)
committerjitendrapurohit <jitendra.purohit@webaccessglobal.com>
Fri, 3 Feb 2017 05:27:00 +0000 (10:57 +0530)
api/v3/Case.php
tests/phpunit/api/v3/CaseTest.php

index 8cfdfe1d2db9c0e34f1af597ee43c199c658e26a..efddd0904b974408d1435e43ad9eba5ca6505cb7 100644 (file)
@@ -453,6 +453,11 @@ function _civicrm_api3_case_format_params(&$params) {
 function civicrm_api3_case_getList($params) {
   require_once 'api/v3/Generic/Getlist.php';
   require_once 'api/v3/CaseContact.php';
+  //CRM:19956 - Assign case_id param if both id and case_id is passed to retrieve the case
+  if (!empty($params['id']) && !empty($params['params']) && !empty($params['params']['case_id'])) {
+    $params['params']['case_id'] = array('IN' => $params['id']);
+    unset($params['id']);
+  }
   $params['id_field'] = 'case_id';
   $params['label_field'] = $params['search_field'] = 'contact_id.sort_name';
   $params['description_field'] = array(
@@ -463,6 +468,7 @@ function civicrm_api3_case_getList($params) {
     'case_id.start_date',
   );
   $apiRequest = array(
+    'version' => 3,
     'entity' => 'CaseContact',
     'action' => 'getlist',
     'params' => $params,
index 8357d62c5c2b9f53b66e4315d8ff131ac90bab32..61558e5f06d45ecaab9886062896b2d6a7c9ebc9 100644 (file)
@@ -96,6 +96,38 @@ class api_v3_CaseTest extends CiviCaseTestCase {
     $this->callAPIFailure('case', 'create', $params);
   }
 
+  /**
+   * Test Getlist with id and case_id
+   */
+  public function testCaseGetListById() {
+    $params = $this->_params;
+    $params['contact_id'] = $this->individualCreate();
+
+    //Create 3 sample Cases.
+    $case1 = $this->callAPISuccess('case', 'create', $params);
+    $params['subject'] = 'Test Case 2';
+    $case2 = $this->callAPISuccess('case', 'create', $params);
+    $params['subject'] = 'Test Case 3';
+    $case3 = $this->callAPISuccess('case', 'create', $params);
+
+    $getParams = array(
+      'id' => array($case1['id']),
+      'extra' => array('contact_id'),
+      'params' => array(
+        'version' => 3,
+        'case_id' => array('!=' => $case2['id']),
+        'case_id.is_deleted' => 0,
+        'case_id.status_id' => array('!=' => "Closed"),
+        'case_id.end_date' => array('IS NULL' => 1),
+      ),
+    );
+    $result = $this->callAPISuccess('case', 'getlist', $getParams);
+
+    //Only 1 case should be returned.
+    $this->assertEquals(count($result['values']), 1);
+    $this->assertEquals($result['values'][0]['id'], $case1['id']);
+  }
+
   /**
    * Test create function with valid parameters.
    */