Skip to content

Commit

Permalink
CRM-19447: Retain legacy code to avoid regressions; add tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
twomice committed Dec 28, 2016
1 parent 96e30da commit 0cfd010
Show file tree
Hide file tree
Showing 3 changed files with 213 additions and 0 deletions.
4 changes: 4 additions & 0 deletions CRM/Activity/BAO/Query.php
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,10 @@ public static function whereClauseSingle(&$values, &$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'))) {
Expand Down
1 change: 1 addition & 0 deletions CRM/Activity/Form/Search.php
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,7 @@ public function postProcess() {
$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);
Expand Down
208 changes: 208 additions & 0 deletions tests/phpunit/CRM/Contact/BAO/ActivitySearchTest.php
Original file line number Diff line number Diff line change
@@ -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);
}

}

0 comments on commit 0cfd010

Please sign in to comment.