class CRM_Activity_BAO_ActivityTest extends CiviUnitTestCase {
public function setUp() {
parent::setUp();
+ $this->prepareForACLs();
+ CRM_Core_Config::singleton()->userPermissionClass->permissions = array('view all contacts', 'access CiviCRM');
}
+ /**
+ * Clean up after tests.
+ */
public function tearDown() {
- // truncate a few tables
- $tablesToTruncate = array('civicrm_contact', 'civicrm_activity', 'civicrm_activity_contact');
+ $tablesToTruncate = array('civicrm_activity', 'civicrm_activity_contact');
$this->quickCleanup($tablesToTruncate);
+ $this->cleanUpAfterACLs();
+ parent::tearDown();
}
/**
'subject', 'Database check for created activity.'
);
- // Now call create() to modify an existing Activity
-
+ // Now call create() to modify an existing Activity.
$params = array(
'id' => $activityId,
'source_contact_id' => $contactId,
'subject', 'Database check for created activity.'
);
+ // @todo - remove this deprecated functions
$activities = CRM_Activity_BAO_Activity::getContactActivity($targetContactId);
$this->assertEquals($activities[$activityId]['subject'], 'Scheduling Meeting', 'Verify activity subject is correct.');
CRM_Activity_BAO_Activity::create($params);
- $activityId = $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id',
+ $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id',
'subject', 'Database check for created activity.'
);
- $activityTargetId = $this->assertDBNotNull('CRM_Activity_DAO_ActivityContact', $targetContactId,
+ $this->assertDBNotNull('CRM_Activity_DAO_ActivityContact', $targetContactId,
'id', 'contact_id',
'Database check for created activity target.'
);
CRM_Activity_BAO_Activity::create($params);
- $activityId = $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id',
+ $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id',
'subject', 'Database check for created activity.'
);
- $activityTargetId = $this->assertDBNotNull('CRM_Activity_DAO_ActivityContact', $targetContactId,
+ $this->assertDBNotNull('CRM_Activity_DAO_ActivityContact', $targetContactId,
'id', 'contact_id',
'Database check for created activity target.'
);
'subject', 'Database check for created activity.'
);
- $activityTargetId = $this->assertDBNotNull('CRM_Activity_DAO_ActivityContact', $targetContactId,
+ $this->assertDBNotNull('CRM_Activity_DAO_ActivityContact', $targetContactId,
'id', 'contact_id',
'Database check for created activity target.'
);
'subject', 'Database check for created activity.'
);
- $activityAssignmentId = $this->assertDBNotNull('CRM_Activity_DAO_ActivityContact',
+ $this->assertDBNotNull('CRM_Activity_DAO_ActivityContact',
$assigneeContactId, 'id', 'contact_id',
'Database check for created activity assignment.'
);
}
/**
- * Test getActivitiesCount BAO method.
+ * Test getActivities BAO method for getting count.
*/
- public function testGetActivitiesCountforAdminDashboard() {
+ public function testGetActivitiesCountForAdminDashboard() {
$op = new PHPUnit_Extensions_Database_Operation_Insert();
$op->execute($this->_dbconn,
$this->createFlatXMLDataSet(
'rowCount' => 0,
'sort' => NULL,
);
- $activityCount = CRM_Activity_BAO_Activity::getActivitiesCount($params);
+ $activityCount = CRM_Activity_BAO_Activity::getActivities($params, TRUE);
//since we are loading activities from dataset, we know total number of activities
// 8 schedule activities that should be shown on dashboard
}
/**
- * Test getActivitiesCount BAO method.
+ * Test getActivities BAO method for getting count
*/
public function testGetActivitiesCountforNonAdminDashboard() {
$op = new PHPUnit_Extensions_Database_Operation_Insert();
'sort' => NULL,
);
- $activityCount = CRM_Activity_BAO_Activity::getActivitiesCount($params);
+ $activityCount = CRM_Activity_BAO_Activity::getActivities($params, TRUE);
//since we are loading activities from dataset, we know total number of activities for this contact
// 5 activities ( 2 scheduled, 3 Completed ), note that dashboard shows only scheduled activities
}
/**
- * Test getActivitiesCount BAO method.
+ * Test getActivities BAO method for getting count
*/
public function testGetActivitiesCountforContactSummary() {
$op = new PHPUnit_Extensions_Database_Operation_Insert();
'rowCount' => 0,
'sort' => NULL,
);
- $activityCount = CRM_Activity_BAO_Activity::getActivitiesCount($params);
+ $activityCount = CRM_Activity_BAO_Activity::getActivities($params, TRUE);
//since we are loading activities from dataset, we know total number of activities for this contact
// 5 activities, Contact Summary should show all activities
$activities = $obj->getContactActivity();
// This should include activities of type Meeting only.
- foreach ($activities['data'] as $key => $value) {
- $this->assertEquals('Meeting', $value['activity_type']);
+ foreach ($activities['data'] as $value) {
+ $this->assertContains('Meeting', $value['activity_type']);
}
unset($_GET['activity_type_id']);
$_GET['activity_type_exclude_id'] = 1;
$activities = $obj->getContactActivity();
// None of the activities should be of type Meeting.
- foreach ($activities['data'] as $key => $value) {
+ foreach ($activities['data'] as $value) {
$this->assertNotEquals('Meeting', $value['activity_type']);
}
}
/**
- * Test getActivitiesCount BAO method.
+ * Test getActivities BAO method for getting count
*/
public function testGetActivitiesCountforContactSummaryWithNoActivities() {
$op = new PHPUnit_Extensions_Database_Operation_Insert();
'rowCount' => 0,
'sort' => NULL,
);
- $activityCount = CRM_Activity_BAO_Activity::getActivitiesCount($params);
+ $activityCount = CRM_Activity_BAO_Activity::getActivities($params, TRUE);
//since we are loading activities from dataset, we know total number of activities for this contact
// this contact does not have any activity
/**
* Test getActivities BAO method.
*/
- public function testGetActivitiesforAdminDashboard() {
+ public function testGetActivitiesForAdminDashboard() {
$op = new PHPUnit_Extensions_Database_Operation_Insert();
$op->execute($this->_dbconn,
$this->createFlatXMLDataSet(
);
$params = array(
- 'contact_id' => 5,
+ 'contact_id' => NULL,
'admin' => TRUE,
'caseId' => NULL,
'context' => 'home',
$activities = CRM_Activity_BAO_Activity::getActivities($params);
//since we are loading activities from dataset, we know total number of activities
- // 8 schedule activities that should be shown on dashboard
+ // with no contact ID and there should be 8 schedule activities shown on dashboard
$count = 8;
$this->assertEquals($count, count($activities));
public function testTargetCountforContactSummary() {
$targetCount = 5;
$contactId = $this->individualCreate();
+ $targetContactIDs = array();
for ($i = 0; $i < $targetCount; $i++) {
$targetContactIDs[] = $this->individualCreate(array(), $i);
}
- // create activities with 5 target contacts
+ // Create activities with 5 target contacts.
$activityParams = array(
'source_contact_id' => $contactId,
'target_contact_id' => $targetContactIDs,
/**
* Test getActivities BAO method.
*/
- public function testGetActivitiesforContactSummaryWithNoActivities() {
+ public function testGetActivitiesforContactSummaryWithActivities() {
$op = new PHPUnit_Extensions_Database_Operation_Insert();
$op->execute($this->_dbconn,
$this->createFlatXMLDataSet(
)
);
+ // parameters for different test casess, check each array key for the specific test-case
+ $testCases = array(
+ 'with-no-activity' => array(
+ 'params' => array(
+ 'contact_id' => 17,
+ 'admin' => FALSE,
+ 'caseId' => NULL,
+ 'context' => 'home',
+ 'activity_type_id' => NULL,
+ 'offset' => 0,
+ 'rowCount' => 0,
+ 'sort' => NULL,
+ ),
+ ),
+ 'with-activity' => array(
+ 'params' => array(
+ 'contact_id' => 1,
+ 'admin' => FALSE,
+ 'caseId' => NULL,
+ 'context' => 'home',
+ 'activity_type_id' => NULL,
+ 'offset' => 0,
+ 'rowCount' => 0,
+ 'sort' => NULL,
+ ),
+ ),
+ 'with-activity_type' => array(
+ 'params' => array(
+ 'contact_id' => 3,
+ 'admin' => FALSE,
+ 'caseId' => NULL,
+ 'context' => 'home',
+ 'activity_type_id' => 2,
+ 'offset' => 0,
+ 'rowCount' => 0,
+ 'sort' => NULL,
+ ),
+ ),
+ 'exclude-all-activity_type' => array(
+ 'params' => array(
+ 'contact_id' => 3,
+ 'admin' => FALSE,
+ 'caseId' => NULL,
+ 'context' => 'home',
+ 'activity_type_exclude_id' => array(1, 2),
+ 'offset' => 0,
+ 'rowCount' => 0,
+ 'sort' => NULL,
+ ),
+ ),
+ 'sort-by-subject' => array(
+ 'params' => array(
+ 'contact_id' => 1,
+ 'admin' => FALSE,
+ 'caseId' => NULL,
+ 'context' => 'home',
+ 'activity_type_id' => NULL,
+ 'offset' => 0,
+ 'rowCount' => 0,
+ 'sort' => 'subject DESC',
+ ),
+ ),
+ );
+
+ foreach ($testCases as $caseName => $testCase) {
+ $activities = CRM_Activity_BAO_Activity::getActivities($testCase['params']);
+ $activityCount = CRM_Activity_BAO_Activity::getActivities($testCase['params'], TRUE);
+ if ($caseName == 'with-no-activity') {
+ $this->assertEquals(0, count($activities));
+ $this->assertEquals(0, $activityCount);
+ }
+ elseif ($caseName == 'with-activity') {
+ // contact id 1 is assigned as source, target and assignee for activity id 1, 7 and 8 respectively
+ $this->assertEquals(3, count($activities));
+ $this->assertEquals(3, $activityCount);
+ $this->assertEquals(1, $activities[1]['source_contact_id']);
+ $this->assertEquals(TRUE, array_key_exists(1, $activities[7]['target_contact_name']));
+ $this->assertEquals(TRUE, array_key_exists(1, $activities[8]['assignee_contact_name']));
+ }
+ elseif ($caseName == 'with-activity_type') {
+ // contact id 3 for activity type 2 is assigned as assignee, source and target for
+ // activity id 1, 3 and 8 respectively
+ $this->assertEquals(3, count($activities));
+ $this->assertEquals(3, $activityCount);
+ // ensure activity type id is 2
+ $this->assertEquals(2, $activities[1]['activity_type_id']);
+ $this->assertEquals(3, $activities[3]['source_contact_id']);
+ $this->assertEquals(TRUE, array_key_exists(3, $activities[8]['target_contact_name']));
+ $this->assertEquals(TRUE, array_key_exists(3, $activities[1]['assignee_contact_name']));
+ }
+ if ($caseName == 'exclude-all-activity_type') {
+ $this->assertEquals(0, count($activities));
+ $this->assertEquals(0, $activityCount);
+ }
+ if ($caseName == 'sort-by-subject') {
+ $this->assertEquals(3, count($activities));
+ $this->assertEquals(3, $activityCount);
+ // activities should be order by 'subject DESC'
+ $subjectOrder = array(
+ 'subject 8',
+ 'subject 7',
+ 'subject 1',
+ );
+ $count = 0;
+ foreach ($activities as $activity) {
+ $this->assertEquals($subjectOrder[$count], $activity['subject']);
+ $count++;
+ }
+ }
+ }
+ }
+
+ /**
+ * CRM-20308: Test from email address when a 'copy of Activity' event occur
+ */
+ public function testEmailAddressOfActivityCopy() {
+ // Case 1: assert the 'From' Email Address of source Actvity Contact ID
+ // create activity with source contact ID which has email address
+ $assigneeContactId = $this->individualCreate();
+ $sourceContactParams = array(
+ 'first_name' => 'liz',
+ 'last_name' => 'hurleey',
+ 'email' => substr(sha1(rand()), 0, 7) . '@testemail.com',
+ );
+ $sourceContactID = $this->individualCreate($sourceContactParams);
+ $sourceDisplayName = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $sourceContactID, 'display_name');
+
+ // create an activity using API
$params = array(
- 'contact_id' => 17,
- 'admin' => FALSE,
- 'caseId' => NULL,
- 'context' => 'home',
- 'activity_type_id' => NULL,
- 'offset' => 0,
- 'rowCount' => 0,
- 'sort' => NULL,
+ 'source_contact_id' => $sourceContactID,
+ 'subject' => 'Scheduling Meeting ' . substr(sha1(rand()), 0, 4),
+ 'activity_type_id' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_type_id', 'Meeting'),
+ 'assignee_contact_id' => array($assigneeContactId),
+ 'activity_date_time' => date('Ymd'),
);
- $activities = CRM_Activity_BAO_Activity::getActivities($params);
+ $activity = $this->callAPISuccess('Activity', 'create', $params);
- //since we are loading activities from dataset, we know total number of activities for this contact
- // This contact does not have any activities
- $this->assertEquals(0, count($activities));
+ // Check that from address is in "Source-Display-Name <source-email>"
+ $formAddress = CRM_Case_BAO_Case::getReceiptFrom($activity['id']);
+ $expectedFromAddress = sprintf("%s <%s>", $sourceDisplayName, $sourceContactParams['email']);
+ $this->assertEquals($expectedFromAddress, $formAddress);
+
+ // Case 2: System Default From Address
+ // but first erase the email address of existing source contact ID
+ $withoutEmailParams = array(
+ 'email' => '',
+ );
+ $sourceContactID = $this->individualCreate($withoutEmailParams);
+ $params = array(
+ 'source_contact_id' => $sourceContactID,
+ 'subject' => 'Scheduling Meeting ' . substr(sha1(rand()), 0, 4),
+ 'activity_type_id' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_type_id', 'Meeting'),
+ 'activity_date_time' => date('Ymd'),
+ );
+ $activity = $this->callAPISuccess('Activity', 'create', $params);
+ // fetch domain info
+ $domainInfo = $this->callAPISuccess('Domain', 'getsingle', array('id' => CRM_Core_Config::domainID()));
+
+ $formAddress = CRM_Case_BAO_Case::getReceiptFrom($activity['id']);
+ if (!empty($domainInfo['from_email'])) {
+ $expectedFromAddress = sprintf("%s <%s>", $domainInfo['from_name'], $domainInfo['from_email']);
+ }
+ // Case 3: fetch default Organization Contact email address
+ elseif (!empty($domainInfo['domain_email'])) {
+ $expectedFromAddress = sprintf("%s <%s>", $domainInfo['name'], $domainInfo['domain_email']);
+ }
+ // TODO: due to unknown reason the following assertion fails on
+ // test.civicrm.org test build but works fine on local
+ // $this->assertEquals($expectedFromAddress, $formAddress);
+
+ // TODO: Case 4 about checking the $formAddress on basis of logged contact ID respectively needs,
+ // to change the domain setting, which isn't straight forward in test environment
}
}