CRM-19447: Retain legacy code to avoid regressions; add tests.
authorAllen Shaw <allen@JoineryHQ.com>
Wed, 28 Dec 2016 22:58:16 +0000 (16:58 -0600)
committerdeb.monish <monish.deb@webaccessglobal.com>
Fri, 30 Dec 2016 09:27:17 +0000 (14:57 +0530)
CRM/Activity/BAO/Query.php
CRM/Activity/Form/Search.php
tests/phpunit/CRM/Contact/BAO/ActivitySearchTest.php [new file with mode: 0644]

index f863c96157523c53202d696493103d5c25e790a1..52cea737ad003f095060de1161e585116926933f 100644 (file)
@@ -192,6 +192,10 @@ class CRM_Activity_BAO_Query {
       case 'activity_engagement_level':
       case 'activity_id':
       case 'activity_campaign_id':
+        // We no longer expect "subject" as a specific criteria (as of CRM-19447),
+        // but I'm leaving this case just to reduce the chance of introducing a
+        // regression.
+      case 'activity_subject':
 
         $qillName = $name;
         if (in_array($name, array('activity_engagement_level', 'activity_id'))) {
index 11be078fe148641d7f11979fa8dc27335596e7e1..9f96e5db4343b2dcc715c3799fd1cbe98df1c4b6 100644 (file)
@@ -195,6 +195,7 @@ class CRM_Activity_Form_Search extends CRM_Core_Form_Search {
       $specialParams = array(
         'activity_type_id',
         'status_id',
+        'activity_text',
       );
       $changeNames = array('status_id' => 'activity_status_id');
       CRM_Contact_BAO_Query::processSpecialFormValue($this->_formValues, $specialParams, $changeNames);
diff --git a/tests/phpunit/CRM/Contact/BAO/ActivitySearchTest.php b/tests/phpunit/CRM/Contact/BAO/ActivitySearchTest.php
new file mode 100644 (file)
index 0000000..f1adc37
--- /dev/null
@@ -0,0 +1,208 @@
+<?php
+/**
+ * @file
+ *  File for the ActivitySearchTest class
+ *
+ *  (PHP 5)
+ *
+ * @copyright Copyright CiviCRM LLC (C) 2009
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html
+ *              GNU Affero General Public License version 3
+ * @package   CiviCRM
+ *
+ *   This file is part of CiviCRM
+ *
+ *   CiviCRM is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU Affero General Public License
+ *   as published by the Free Software Foundation; either version 3 of
+ *   the License, or (at your option) any later version.
+ *
+ *   CiviCRM is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU Affero General Public License for more details.
+ *
+ *   You should have received a copy of the GNU Affero General Public
+ *   License along with this program.  If not, see
+ *   <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ *  Include class definitions
+ */
+
+/**
+ * Test APIv3 civicrm_activity_* functions
+ *
+ * @package CiviCRM_APIv3
+ * @subpackage API_Activity
+ * @group headless
+ */
+class CRM_Contact_BAO_ActivitySearchTest extends CiviUnitTestCase {
+  protected $_contactID;
+  protected $_params;
+  protected $test_activity_type_value;
+
+
+  /**
+   * Test setup for every test.
+   *
+   * Connect to the database, truncate the tables that will be used
+   * and redirect stdin to a temporary file
+   */
+  public function setUp() {
+    // Connect to the database
+    parent::setUp();
+
+    $this->_contactID = $this->individualCreate();
+    //create activity types
+    $activityTypes = $this->callAPISuccess('option_value', 'create', array(
+      'option_group_id' => 2,
+      'name' => 'Test activity type',
+      'label' => 'Test activity type',
+      'sequential' => 1,
+    ));
+    $this->test_activity_type_id = $activityTypes['id'];
+    $this->_params = array(
+      'source_contact_id' => $this->_contactID,
+      'activity_type_id' => $activityTypes['values'][0]['value'],
+      'subject' => 'test activity type id',
+      'activity_date_time' => '2011-06-02 14:36:13',
+      'status_id' => 2,
+      'priority_id' => 1,
+      'duration' => 120,
+      'location' => 'Pennsylvania',
+      'details' => 'a test activity',
+    );
+    // create a logged in USER since the code references it for source_contact_id
+    $this->createLoggedInUser();
+  }
+
+  /**
+   * Tears down the fixture, for example, closes a network connection.
+   *
+   * This method is called after a test is executed.
+   */
+  public function tearDown() {
+    $tablesToTruncate = array(
+      'civicrm_contact',
+      'civicrm_activity',
+      'civicrm_activity_contact',
+      'civicrm_uf_match',
+    );
+    $this->quickCleanup($tablesToTruncate, TRUE);
+    $type = $this->callAPISuccess('optionValue', 'get', array('id' => $this->test_activity_type_id));
+    if (!empty($type['count'])) {
+      $this->callAPISuccess('option_value', 'delete', array('id' => $this->test_activity_type_id));
+    }
+  }
+
+  /**
+   * Test that activity.get api works when filtering on subject.
+   */
+  public function testSearchBySubjectOnly() {
+    $subject = 'test activity ' . __FUNCTION__;
+    $params = $this->_params;
+    $params['subject'] = $subject;
+    $activity = $this->callAPISuccess('Activity', 'Create', $params);
+
+    $case = array(
+      'form_value' => array(
+        'activity_text' => $subject,
+        'activity_option' => 3,
+      ),
+      'expected_count' => 1,
+      'expected_contact' => array($this->_contactID),
+    );
+    $query = new CRM_Contact_BAO_Query(CRM_Contact_BAO_Query::convertFormValues($case['form_value']));
+    list($select, $from, $where, $having) = $query->query();
+    $groupContacts = CRM_Core_DAO::executeQuery("SELECT DISTINCT contact_a.id $from $where")->fetchAll();
+    foreach ($groupContacts as $key => $value) {
+      $groupContacts[$key] = $value['id'];
+    }
+    $this->assertEquals($case['expected_count'], count($groupContacts));
+    $this->checkArrayEquals($case['expected_contact'], $groupContacts);
+  }
+
+  /**
+   * Test that activity.get api works when filtering on subject.
+   */
+  public function testSearchBySubjectBoth() {
+    $subject = 'test activity ' . __FUNCTION__;
+    $params = $this->_params;
+    $params['subject'] = $subject;
+    $activity = $this->callAPISuccess('Activity', 'Create', $params);
+
+    $case = array(
+      'form_value' => array(
+        'activity_text' => $subject,
+        'activity_option' => 6,
+      ),
+      'expected_count' => 1,
+      'expected_contact' => array($this->_contactID),
+    );
+    $query = new CRM_Contact_BAO_Query(CRM_Contact_BAO_Query::convertFormValues($case['form_value']));
+    list($select, $from, $where, $having) = $query->query();
+    $groupContacts = CRM_Core_DAO::executeQuery("SELECT DISTINCT contact_a.id $from $where")->fetchAll();
+    foreach ($groupContacts as $key => $value) {
+      $groupContacts[$key] = $value['id'];
+    }
+    $this->assertEquals($case['expected_count'], count($groupContacts));
+    $this->checkArrayEquals($case['expected_contact'], $groupContacts);
+  }
+
+  /**
+   * Test that activity.get api works when filtering on subject.
+   */
+  public function testSearchByDetailsOnly() {
+    $details = 'test activity ' . __FUNCTION__;
+    $params = $this->_params;
+    $params['details'] = $details;
+    $activity = $this->callAPISuccess('Activity', 'Create', $params);
+
+    $case = array(
+      'form_value' => array(
+        'activity_text' => $details,
+        'activity_option' => 2,
+      ),
+      'expected_count' => 1,
+      'expected_contact' => array($this->_contactID),
+    );
+    $query = new CRM_Contact_BAO_Query(CRM_Contact_BAO_Query::convertFormValues($case['form_value']));
+    list($select, $from, $where, $having) = $query->query();
+    $groupContacts = CRM_Core_DAO::executeQuery("SELECT DISTINCT contact_a.id $from $where")->fetchAll();
+    foreach ($groupContacts as $key => $value) {
+      $groupContacts[$key] = $value['id'];
+    }
+    $this->assertEquals($case['expected_count'], count($groupContacts));
+    $this->checkArrayEquals($case['expected_contact'], $groupContacts);
+  }
+
+  /**
+   * Test that activity.get api works when filtering on details.
+   */
+  public function testSearchByDetailsBoth() {
+    $details = 'test activity ' . __FUNCTION__;
+    $params = $this->_params;
+    $params['details'] = $details;
+    $activity = $this->callAPISuccess('Activity', 'Create', $params);
+
+    $case = array(
+      'form_value' => array(
+        'activity_text' => $details,
+        'activity_option' => 6,
+      ),
+      'expected_count' => 1,
+      'expected_contact' => array($this->_contactID),
+    );
+    $query = new CRM_Contact_BAO_Query(CRM_Contact_BAO_Query::convertFormValues($case['form_value']));
+    list($select, $from, $where, $having) = $query->query();
+    $groupContacts = CRM_Core_DAO::executeQuery("SELECT DISTINCT contact_a.id $from $where")->fetchAll();
+    foreach ($groupContacts as $key => $value) {
+      $groupContacts[$key] = $value['id'];
+    }
+    $this->assertEquals($case['expected_count'], count($groupContacts));
+    $this->checkArrayEquals($case['expected_contact'], $groupContacts);
+  }
+
+}