. */ /** * 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', [ 'option_group_id' => 2, 'name' => 'Test activity type', 'label' => 'Test activity type', 'sequential' => 1, ]); $this->test_activity_type_id = $activityTypes['id']; $this->_params = [ '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 = [ 'civicrm_contact', 'civicrm_activity', 'civicrm_activity_contact', 'civicrm_uf_match', ]; $this->quickCleanup($tablesToTruncate, TRUE); $type = $this->callAPISuccess('optionValue', 'get', ['id' => $this->test_activity_type_id]); if (!empty($type['count'])) { $this->callAPISuccess('option_value', 'delete', ['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; $this->callAPISuccess('Activity', 'Create', $params); $case = [ 'form_value' => [ 'activity_text' => $subject, 'activity_option' => 3, ], 'expected_count' => 1, 'expected_contact' => [$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 = [ 'form_value' => [ 'activity_text' => $subject, 'activity_option' => 6, ], 'expected_count' => 1, 'expected_contact' => [$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 = [ 'form_value' => [ 'activity_text' => $details, 'activity_option' => 2, ], 'expected_count' => 1, 'expected_contact' => [$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 = [ 'form_value' => [ 'activity_text' => $details, 'activity_option' => 6, ], 'expected_count' => 1, 'expected_contact' => [$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); } }