4 * Class CRM_Activity_BAO_ActivityTest
7 class CRM_Activity_BAO_ActivityTest
extends CiviUnitTestCase
{
8 public function setUp() {
10 $this->prepareForACLs();
11 CRM_Core_Config
::singleton()->userPermissionClass
->permissions
= array('view all contacts', 'access CiviCRM');
15 * Clean up after tests.
17 public function tearDown() {
18 $tablesToTruncate = array(
20 'civicrm_activity_contact',
25 $this->quickCleanup($tablesToTruncate);
26 $this->cleanUpAfterACLs();
31 * Test case for create() method.
33 public function testCreate() {
34 $contactId = $this->individualCreate();
37 'source_contact_id' => $contactId,
38 'subject' => 'Scheduling Meeting',
39 'activity_type_id' => 2,
42 CRM_Activity_BAO_Activity
::create($params);
44 $activityId = $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id',
45 'subject', 'Database check for created activity.'
48 // Now call create() to modify an existing Activity.
51 'source_contact_id' => $contactId,
52 'subject' => 'Scheduling Interview',
53 'activity_type_id' => 3,
56 CRM_Activity_BAO_Activity
::create($params);
58 $activityTypeId = $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Interview',
60 'subject', 'Database check on updated activity record.'
62 $this->assertEquals($activityTypeId, 3, 'Verify activity type id is 3.');
64 $this->contactDelete($contactId);
68 * Test case for getContactActivity() method.
70 * getContactActivity() method get activities detail for given target contact id.
72 public function testGetContactActivity() {
73 $contactId = $this->individualCreate();
75 'first_name' => 'liz',
76 'last_name' => 'hurleey',
78 $targetContactId = $this->individualCreate($params);
81 'source_contact_id' => $contactId,
82 'subject' => 'Scheduling Meeting',
83 'activity_type_id' => 2,
84 'target_contact_id' => array($targetContactId),
85 'activity_date_time' => date('Ymd'),
88 $this->callAPISuccess('Activity', 'create', $params);
90 $activityId = $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting',
92 'subject', 'Database check for created activity.'
95 // @todo - remove this deprecated functions
96 $activities = CRM_Activity_BAO_Activity
::getContactActivity($targetContactId);
98 $this->assertEquals($activities[$activityId]['subject'], 'Scheduling Meeting', 'Verify activity subject is correct.');
100 $this->contactDelete($contactId);
101 $this->contactDelete($targetContactId);
105 * Test case for retrieve() method.
107 * Retrieve($params, $defaults) method return activity detail for given params
110 public function testRetrieve() {
111 $contactId = $this->individualCreate();
113 'first_name' => 'liz',
114 'last_name' => 'hurleey',
116 $targetContactId = $this->individualCreate($params);
119 'source_contact_id' => $contactId,
120 'subject' => 'Scheduling Meeting',
121 'activity_type_id' => 2,
122 'target_contact_id' => array($targetContactId),
123 'activity_date_time' => date('Ymd'),
126 CRM_Activity_BAO_Activity
::create($params);
128 $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id',
129 'subject', 'Database check for created activity.'
132 $this->assertDBNotNull('CRM_Activity_DAO_ActivityContact', $targetContactId,
134 'Database check for created activity target.'
138 $activity = CRM_Activity_BAO_Activity
::retrieve($params, $defaults);
140 $this->assertEquals($activity->subject
, 'Scheduling Meeting', 'Verify activity subject is correct.');
141 $this->assertEquals($activity->activity_type_id
, 2, 'Verify activity type id is correct.');
142 $this->assertEquals($defaults['source_contact_id'], $contactId, 'Verify source contact id is correct.');
144 $this->assertEquals($defaults['subject'], 'Scheduling Meeting', 'Verify activity subject is correct.');
145 $this->assertEquals($defaults['activity_type_id'], 2, 'Verify activity type id is correct.');
147 $this->assertEquals($defaults['target_contact'][0], $targetContactId, 'Verify target contact id is correct.');
149 $this->contactDelete($contactId);
150 $this->contactDelete($targetContactId);
154 * Test case for deleteActivity() method.
156 * deleteActivity($params) method deletes activity for given params.
158 public function testDeleteActivity() {
159 $contactId = $this->individualCreate();
161 'first_name' => 'liz',
162 'last_name' => 'hurleey',
164 $targetContactId = $this->individualCreate($params);
167 'source_contact_id' => $contactId,
168 'source_record_id' => $contactId,
169 'subject' => 'Scheduling Meeting',
170 'activity_type_id' => 2,
171 'target_contact_id' => array($targetContactId),
172 'activity_date_time' => date('Ymd'),
175 CRM_Activity_BAO_Activity
::create($params);
177 $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id',
178 'subject', 'Database check for created activity.'
181 $this->assertDBNotNull('CRM_Activity_DAO_ActivityContact', $targetContactId,
183 'Database check for created activity target.'
186 'source_contact_id' => $contactId,
187 'source_record_id' => $contactId,
188 'subject' => 'Scheduling Meeting',
189 'activity_type_id' => 2,
192 CRM_Activity_BAO_Activity
::deleteActivity($params);
194 $this->assertDBNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id',
195 'subject', 'Database check for deleted activity.'
197 $this->contactDelete($contactId);
198 $this->contactDelete($targetContactId);
202 * Test case for deleteActivityTarget() method.
204 * deleteActivityTarget($activityId) method deletes activity target for given activity id.
206 public function testDeleteActivityTarget() {
207 $contactId = $this->individualCreate();
209 'first_name' => 'liz',
210 'last_name' => 'hurleey',
212 $targetContactId = $this->individualCreate($params);
215 'source_contact_id' => $contactId,
216 'subject' => 'Scheduling Meeting',
217 'activity_type_id' => 2,
218 'target_contact_id' => array($targetContactId),
219 'activity_date_time' => date('Ymd'),
222 CRM_Activity_BAO_Activity
::create($params);
224 $activityId = $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id',
225 'subject', 'Database check for created activity.'
228 $this->assertDBNotNull('CRM_Activity_DAO_ActivityContact', $targetContactId,
230 'Database check for created activity target.'
233 CRM_Activity_BAO_Activity
::deleteActivityContact($activityId, 3);
235 $this->assertDBNull('CRM_Activity_DAO_ActivityContact', $targetContactId, 'id',
236 'contact_id', 'Database check for deleted activity target.'
239 $this->contactDelete($contactId);
240 $this->contactDelete($targetContactId);
244 * Test case for deleteActivityAssignment() method.
246 * deleteActivityAssignment($activityId) method deletes activity assignment for given activity id.
248 public function testDeleteActivityAssignment() {
249 $contactId = $this->individualCreate();
251 'first_name' => 'liz',
252 'last_name' => 'hurleey',
254 $assigneeContactId = $this->individualCreate($params);
257 'source_contact_id' => $contactId,
258 'subject' => 'Scheduling Meeting',
259 'activity_type_id' => 2,
260 'assignee_contact_id' => array($assigneeContactId),
261 'activity_date_time' => date('Ymd'),
264 CRM_Activity_BAO_Activity
::create($params);
266 $activityId = $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id',
267 'subject', 'Database check for created activity.'
270 $this->assertDBNotNull('CRM_Activity_DAO_ActivityContact',
271 $assigneeContactId, 'id', 'contact_id',
272 'Database check for created activity assignment.'
275 CRM_Activity_BAO_Activity
::deleteActivityContact($activityId, 1);
277 $this->assertDBNull('CRM_Activity_DAO_ActivityContact', $assigneeContactId, 'id',
278 'contact_id', 'Database check for deleted activity assignment.'
281 $this->contactDelete($contactId);
282 $this->contactDelete($assigneeContactId);
286 * Test getActivities BAO method for getting count.
288 public function testGetActivitiesCountForAdminDashboard() {
289 $this->setUpForActivityDashboardTests();
290 $activityCount = CRM_Activity_BAO_Activity
::deprecatedGetActivitiesCount($this->_params
);
291 $this->assertEquals(8, $activityCount);
292 $activityCount = CRM_Activity_BAO_Activity
::getActivitiesCount($this->_params
);
293 $this->assertEquals(8, $activityCount);
297 * Test getActivities BAO method for getting count
299 public function testGetActivitiesCountforNonAdminDashboard() {
300 $op = new PHPUnit_Extensions_Database_Operation_Insert();
301 $op->execute($this->_dbconn
,
302 $this->createFlatXMLDataSet(
303 dirname(__FILE__
) . '/activities_for_dashboard_count.xml'
312 'activity_type_id' => NULL,
318 $activityCount = CRM_Activity_BAO_Activity
::deprecatedGetActivitiesCount($params);
320 //since we are loading activities from dataset, we know total number of activities for this contact
321 // 5 activities ( 2 scheduled, 3 Completed ), note that dashboard shows only scheduled activities
323 $this->assertEquals($count, $activityCount);
324 $this->assertEquals(2, CRM_Activity_BAO_Activity
::getActivitiesCount($params));
328 * Test getActivities BAO method for getting count
330 public function testGetActivitiesCountforContactSummary() {
331 $op = new PHPUnit_Extensions_Database_Operation_Insert();
332 $op->execute($this->_dbconn
,
333 $this->createFlatXMLDataSet(
334 dirname(__FILE__
) . '/activities_for_dashboard_count.xml'
342 'context' => 'activity',
343 'activity_type_id' => NULL,
348 $activityCount = CRM_Activity_BAO_Activity
::deprecatedGetActivitiesCount($params);
350 //since we are loading activities from dataset, we know total number of activities for this contact
351 // 5 activities, Contact Summary should show all activities
353 $this->assertEquals($count, $activityCount);
354 $this->assertEquals(5, CRM_Activity_BAO_Activity
::getActivitiesCount($params));
358 * CRM-18706 - Test Include/Exclude Activity Filters
360 public function testActivityFilters() {
361 $op = new PHPUnit_Extensions_Database_Operation_Insert();
362 $op->execute($this->_dbconn
,
363 $this->createFlatXMLDataSet(
364 dirname(__FILE__
) . '/activities_for_dashboard_count.xml'
371 'context' => 'activity',
372 'activity_type_id' => 1,
375 $obj = new CRM_Activity_Page_AJAX();
377 $activities = $obj->getContactActivity();
378 // This should include activities of type Meeting only.
379 foreach ($activities['data'] as $value) {
380 $this->assertContains('Meeting', $value['activity_type']);
382 unset($_GET['activity_type_id']);
384 $_GET['activity_type_exclude_id'] = 1;
385 $activities = $obj->getContactActivity();
386 // None of the activities should be of type Meeting.
387 foreach ($activities['data'] as $value) {
388 $this->assertNotEquals('Meeting', $value['activity_type']);
393 * Test getActivities BAO method for getting count
395 public function testGetActivitiesCountforContactSummaryWithNoActivities() {
396 $op = new PHPUnit_Extensions_Database_Operation_Insert();
397 $op->execute($this->_dbconn
,
398 $this->createFlatXMLDataSet(
399 dirname(__FILE__
) . '/activities_for_dashboard_count.xml'
408 'activity_type_id' => NULL,
413 $activityCount = CRM_Activity_BAO_Activity
::deprecatedGetActivitiesCount($params);
415 //since we are loading activities from dataset, we know total number of activities for this contact
416 // this contact does not have any activity
417 $this->assertEquals(0, $activityCount);
418 $this->assertEquals(0, CRM_Activity_BAO_Activity
::getActivitiesCount($params));
422 * Test getActivities BAO method.
424 public function testGetActivitiesForAdminDashboard() {
425 $this->setUpForActivityDashboardTests();
426 $activitiesDeprecatedFn = CRM_Activity_BAO_Activity
::deprecatedGetActivities($this->_params
);
427 $activitiesNew = CRM_Activity_BAO_Activity
::getActivities($this->_params
);
428 // $this->assertEquals($activities, $activitiesDeprecatedFn);
430 //since we are loading activities from dataset, we know total number of activities
431 // with no contact ID and there should be 8 schedule activities shown on dashboard
433 foreach (array($activitiesNew, $activitiesDeprecatedFn) as $activities) {
434 $this->assertEquals($count, count($activities));
436 foreach ($activities as $key => $value) {
437 $this->assertEquals($value['subject'], "subject {$key}", 'Verify activity subject is correct.');
438 $this->assertEquals($value['activity_type_id'], 2, 'Verify activity type is correct.');
439 $this->assertEquals($value['status_id'], 1, 'Verify all activities are scheduled.');
445 * Test getActivities BAO method.
447 public function testGetActivitiesForAdminDashboardNoViewContacts() {
448 CRM_Core_Config
::singleton()->userPermissionClass
->permissions
= array('access CiviCRM');
449 $this->setUpForActivityDashboardTests();
450 $activitiesDeprecated = CRM_Activity_BAO_Activity
::deprecatedGetActivities($this->_params
);
451 foreach (array($activitiesDeprecated, CRM_Activity_BAO_Activity
::getActivities($this->_params
)) as $activities) {
452 // Skipped until we get back to the upgraded version properly.
453 //$this->assertEquals(0, count($activities));
458 * Test getActivities BAO method.
460 public function testGetActivitiesForAdminDashboardAclLimitedViewContacts() {
461 CRM_Core_Config
::singleton()->userPermissionClass
->permissions
= array('access CiviCRM');
462 $this->allowedContacts
= array(1, 3, 4, 5);
463 $this->hookClass
->setHook('civicrm_aclWhereClause', array($this, 'aclWhereMultipleContacts'));
464 $this->setUpForActivityDashboardTests();
465 $activitiesDeprecated = CRM_Activity_BAO_Activity
::deprecatedGetActivities($this->_params
);
466 foreach (array($activitiesDeprecated, CRM_Activity_BAO_Activity
::getActivities($this->_params
)) as $activities) {
467 //$this->assertEquals(1, count($activities));
473 * Test getActivities BAO method.
475 public function testGetActivitiesforNonAdminDashboard() {
476 $op = new PHPUnit_Extensions_Database_Operation_Insert();
477 $op->execute($this->_dbconn
,
478 $this->createFlatXMLDataSet(
479 dirname(__FILE__
) . '/activities_for_dashboard_count.xml'
485 'contact_id' => $contactID,
489 'activity_type_id' => NULL,
494 $activitiesDep = CRM_Activity_BAO_Activity
::deprecatedGetActivities($params);
496 foreach (array($activitiesDep, CRM_Activity_BAO_Activity
::getActivities($params)) as $activities) {
497 //since we are loading activities from dataset, we know total number of activities for this contact
498 // 5 activities ( 2 scheduled, 3 Completed ), note that dashboard shows only scheduled activities
500 $this->assertEquals($count, count($activities));
502 foreach ($activities as $key => $value) {
503 $this->assertEquals($value['subject'], "subject {$key}", 'Verify activity subject is correct.');
504 $this->assertEquals($value['activity_type_id'], 2, 'Verify activity type is correct.');
505 $this->assertEquals($value['status_id'], 1, 'Verify all activities are scheduled.');
508 $this->assertArrayHasKey($contactID, $value['target_contact_name']);
511 $this->assertArrayHasKey($contactID, $value['assignee_contact_name']);
518 * Test target contact count.
520 public function testTargetCountforContactSummary() {
522 $contactId = $this->individualCreate();
523 $targetContactIDs = array();
524 for ($i = 0; $i < $targetCount; $i++
) {
525 $targetContactIDs[] = $this->individualCreate(array(), $i);
527 // Create activities with 5 target contacts.
528 $activityParams = array(
529 'source_contact_id' => $contactId,
530 'target_contact_id' => $targetContactIDs,
532 $this->activityCreate($activityParams);
535 'contact_id' => $contactId,
536 'context' => 'activity',
538 $activitiesDep = CRM_Activity_BAO_Activity
::deprecatedGetActivities($params);
539 foreach (array($activitiesDep, CRM_Activity_BAO_Activity
::getActivities($params)) as $activities) {
540 //verify target count
541 $this->assertEquals($targetCount, $activities[1]['target_contact_counter']);
547 * Test getActivities BAO method.
549 public function testGetActivitiesforContactSummary() {
550 $op = new PHPUnit_Extensions_Database_Operation_Insert();
551 $op->execute($this->_dbconn
,
552 $this->createFlatXMLDataSet(
553 dirname(__FILE__
) . '/activities_for_dashboard_count.xml'
559 'contact_id' => $contactID,
562 'context' => 'activity',
563 'activity_type_id' => NULL,
568 $activitiesDep = CRM_Activity_BAO_Activity
::deprecatedGetActivities($params);
570 //since we are loading activities from dataset, we know total number of activities for this contact
571 // 5 activities, Contact Summary should show all activities
573 foreach (array($activitiesDep, CRM_Activity_BAO_Activity
::getActivities($params)) as $activities) {
575 $this->assertEquals($count, count($activities));
577 foreach ($activities as $key => $value) {
578 $this->assertEquals($value['subject'], "subject {$key}", 'Verify activity subject is correct.');
581 $this->assertEquals($value['status_id'], 2, 'Verify all activities are scheduled.');
584 $this->assertEquals($value['status_id'], 1, 'Verify all activities are scheduled.');
588 $this->assertEquals($value['activity_type_id'], 1, 'Verify activity type is correct.');
591 $this->assertEquals($value['activity_type_id'], 2, 'Verify activity type is correct.');
595 $this->assertArrayHasKey($contactID, $value['target_contact_name']);
598 $this->assertArrayHasKey($contactID, $value['assignee_contact_name']);
605 * Test getActivities BAO method.
607 public function testGetActivitiesforContactSummaryWithActivities() {
608 $op = new PHPUnit_Extensions_Database_Operation_Insert();
609 $op->execute($this->_dbconn
,
610 $this->createFlatXMLDataSet(
611 dirname(__FILE__
) . '/activities_for_dashboard_count.xml'
615 // parameters for different test cases, check each array key for the specific test-case
617 'with-no-activity' => array(
623 'activity_type_id' => NULL,
629 'with-activity' => array(
635 'activity_type_id' => NULL,
641 'with-activity_type' => array(
647 'activity_type_id' => 2,
653 'exclude-all-activity_type' => array(
659 'activity_type_exclude_id' => array(1, 2),
665 'sort-by-subject' => array(
671 'activity_type_id' => NULL,
674 'sort' => 'subject DESC',
679 foreach ($testCases as $caseName => $testCase) {
680 $activitiesDep = CRM_Activity_BAO_Activity
::deprecatedGetActivities($testCase['params']);
681 $activityCount = CRM_Activity_BAO_Activity
::deprecatedGetActivitiesCount($testCase['params']);
682 $activitiesNew = CRM_Activity_BAO_Activity
::getActivities($testCase['params']);
684 foreach (array($activitiesDep, $activitiesNew) as $activities) {
685 //$this->assertEquals($activityCount, CRM_Activity_BAO_Activity::getActivitiesCount($testCase['params']));
686 if ($caseName == 'with-no-activity') {
687 $this->assertEquals(0, count($activities));
688 $this->assertEquals(0, $activityCount);
690 elseif ($caseName == 'with-activity') {
691 // contact id 1 is assigned as source, target and assignee for activity id 1, 7 and 8 respectively
692 $this->assertEquals(3, count($activities));
693 $this->assertEquals(3, $activityCount);
694 $this->assertEquals(1, $activities[1]['source_contact_id']);
695 // @todo - this is a discrepancy between old & new - review.
696 //$this->assertEquals(TRUE, array_key_exists(1, $activities[7]['target_contact_name']));
697 $this->assertEquals(TRUE, array_key_exists(1, $activities[8]['assignee_contact_name']));
699 elseif ($caseName == 'with-activity_type') {
700 // contact id 3 for activity type 2 is assigned as assignee, source and target for
701 // activity id 1, 3 and 8 respectively
702 $this->assertEquals(3, count($activities));
703 $this->assertEquals(3, $activityCount);
704 // ensure activity type id is 2
705 $this->assertEquals(2, $activities[1]['activity_type_id']);
706 $this->assertEquals(3, $activities[3]['source_contact_id']);
707 // @todo review inconsistency between 2 versions.
708 // $this->assertEquals(TRUE, array_key_exists(3, $activities[8]['target_contact_name']));
709 $this->assertEquals(TRUE, array_key_exists(3, $activities[1]['assignee_contact_name']));
711 if ($caseName == 'exclude-all-activity_type') {
712 $this->assertEquals(0, count($activities));
713 $this->assertEquals(0, $activityCount);
715 if ($caseName == 'sort-by-subject') {
716 $this->assertEquals(3, count($activities));
717 $this->assertEquals(3, $activityCount);
718 // activities should be order by 'subject DESC'
719 $subjectOrder = array(
725 foreach ($activities as $activity) {
726 $this->assertEquals($subjectOrder[$count], $activity['subject']);
735 * CRM-20793 : Test getActivities by using activity date and status filter
737 public function testbyActivityDateAndStatus() {
738 $op = new PHPUnit_Extensions_Database_Operation_Insert();
739 $op->execute($this->_dbconn
,
740 $this->createFlatXMLDataSet(
741 dirname(__FILE__
) . '/activities_for_dashboard_count.xml'
745 // activity IDs catagorised by date
746 $lastWeekActivities = array(1, 2, 3);
747 $todayActivities = array(4, 5, 6, 7);
748 $lastTwoMonthsActivities = array(8, 9, 10, 11);
749 $lastYearActivties = array(12, 13, 14, 15, 16);
751 // date values later used to set activity date value
752 $lastWeekDate = date('YmdHis', strtotime('1 week ago'));
753 $today = date('YmdHis');
754 $lastTwoMonthAgoDate = date('YmdHis', strtotime('2 months ago'));
755 $lastYearDate = date('YmdHis', strtotime('1 year ago'));
756 for ($i = 1; $i <= 16; $i++
) {
757 if (in_array($i, $lastWeekActivities)) {
758 $date = $lastWeekDate;
760 elseif (in_array($i, $lastTwoMonthsActivities)) {
761 $date = $lastTwoMonthAgoDate;
763 elseif (in_array($i, $lastYearActivties)) {
764 $date = $lastYearDate;
766 elseif (in_array($i, $todayActivities)) {
769 $this->callAPISuccess('Activity', 'create', array(
771 'activity_date_time' => $date,
775 // parameters for different test cases, check each array key for the specific test-case
777 'todays-activity' => array(
782 'context' => 'activity',
783 'activity_date_relative' => 'this.day',
784 'activity_type_id' => NULL,
790 'todays-activity-filtered-by-range' => array(
795 'context' => 'activity',
796 'activity_date_low' => date('Y/m/d', strtotime('yesterday')),
797 'activity_date_high' => date('Y/m/d'),
798 'activity_type_id' => NULL,
804 'last-week-activity' => array(
809 'context' => 'activity',
810 'activity_date_relative' => 'previous.week',
811 'activity_type_id' => NULL,
817 'this-quarter-activity' => array(
822 'context' => 'activity',
823 'activity_date_relative' => 'this.quarter',
824 'activity_type_id' => NULL,
830 'last-year-activity' => array(
835 'context' => 'activity',
836 'activity_date_relative' => 'previous.year',
837 'activity_type_id' => NULL,
843 'activity-of-all-statuses' => array(
848 'context' => 'activity',
849 'activity_status_id' => '1,2',
850 'activity_type_id' => NULL,
858 foreach ($testCases as $caseName => $testCase) {
859 $activitiesDep = CRM_Activity_BAO_Activity
::deprecatedGetActivities($testCase['params']);
860 $activityCount = CRM_Activity_BAO_Activity
::deprecatedGetActivitiesCount($testCase['params']);
861 asort($activitiesDep);
862 $activityIDs = array_keys($activitiesDep);
864 if ($caseName == 'todays-activity' ||
$caseName == 'todays-activity-filtered-by-range') {
865 $this->assertEquals(count($todayActivities), $activityCount);
866 $this->assertEquals(count($todayActivities), count($activitiesDep));
867 $this->checkArrayEquals($todayActivities, $activityIDs);
869 elseif ($caseName == 'last-week-activity') {
870 $this->assertEquals(count($lastWeekActivities), $activityCount);
871 $this->assertEquals(count($lastWeekActivities), count($activitiesDep));
872 $this->checkArrayEquals($lastWeekActivities, $activityIDs);
874 elseif ($caseName == 'lhis-quarter-activity') {
875 $this->assertEquals(count($lastTwoMonthsActivities), $activityCount);
876 $this->assertEquals(count($lastTwoMonthsActivities), count($activitiesDep));
877 $this->checkArrayEquals($lastTwoMonthsActivities, $activityIDs);
879 elseif ($caseName == 'last-year-activity') {
880 $this->assertEquals(count($lastYearActivties), $activityCount);
881 $this->assertEquals(count($lastYearActivties), count($activitiesDep));
882 $this->checkArrayEquals($lastYearActivties, $activityIDs);
884 elseif ($caseName == 'activity-of-all-statuses') {
885 $this->assertEquals(16, $activityCount);
886 $this->assertEquals(16, count($activitiesDep));
892 * CRM-20308: Test from email address when a 'copy of Activity' event occur
894 public function testEmailAddressOfActivityCopy() {
895 // Case 1: assert the 'From' Email Address of source Actvity Contact ID
896 // create activity with source contact ID which has email address
897 $assigneeContactId = $this->individualCreate();
898 $sourceContactParams = array(
899 'first_name' => 'liz',
900 'last_name' => 'hurleey',
901 'email' => substr(sha1(rand()), 0, 7) . '@testemail.com',
903 $sourceContactID = $this->individualCreate($sourceContactParams);
904 $sourceDisplayName = CRM_Core_DAO
::getFieldValue('CRM_Contact_DAO_Contact', $sourceContactID, 'display_name');
906 // create an activity using API
908 'source_contact_id' => $sourceContactID,
909 'subject' => 'Scheduling Meeting ' . substr(sha1(rand()), 0, 4),
910 'activity_type_id' => CRM_Core_PseudoConstant
::getKey('CRM_Activity_BAO_Activity', 'activity_type_id', 'Meeting'),
911 'assignee_contact_id' => array($assigneeContactId),
912 'activity_date_time' => date('Ymd'),
914 $activity = $this->callAPISuccess('Activity', 'create', $params);
916 // Check that from address is in "Source-Display-Name <source-email>"
917 $formAddress = CRM_Case_BAO_Case
::getReceiptFrom($activity['id']);
918 $expectedFromAddress = sprintf("%s <%s>", $sourceDisplayName, $sourceContactParams['email']);
919 $this->assertEquals($expectedFromAddress, $formAddress);
921 // Case 2: System Default From Address
922 // but first erase the email address of existing source contact ID
923 $withoutEmailParams = array(
926 $sourceContactID = $this->individualCreate($withoutEmailParams);
928 'source_contact_id' => $sourceContactID,
929 'subject' => 'Scheduling Meeting ' . substr(sha1(rand()), 0, 4),
930 'activity_type_id' => CRM_Core_PseudoConstant
::getKey('CRM_Activity_BAO_Activity', 'activity_type_id', 'Meeting'),
931 'activity_date_time' => date('Ymd'),
933 $activity = $this->callAPISuccess('Activity', 'create', $params);
935 $domainInfo = $this->callAPISuccess('Domain', 'getsingle', array('id' => CRM_Core_Config
::domainID()));
937 $formAddress = CRM_Case_BAO_Case
::getReceiptFrom($activity['id']);
938 if (!empty($domainInfo['from_email'])) {
939 $expectedFromAddress = sprintf("%s <%s>", $domainInfo['from_name'], $domainInfo['from_email']);
941 // Case 3: fetch default Organization Contact email address
942 elseif (!empty($domainInfo['domain_email'])) {
943 $expectedFromAddress = sprintf("%s <%s>", $domainInfo['name'], $domainInfo['domain_email']);
945 $this->assertEquals($expectedFromAddress, $formAddress);
947 // TODO: Case 4 about checking the $formAddress on basis of logged contact ID respectively needs,
948 // to change the domain setting, which isn't straight forward in test environment
952 * Set up for testing activity queries.
954 protected function setUpForActivityDashboardTests() {
955 $op = new PHPUnit_Extensions_Database_Operation_Insert();
956 $op->execute($this->_dbconn
,
957 $this->createFlatXMLDataSet(
958 dirname(__FILE__
) . '/activities_for_dashboard_count.xml'
962 $this->_params
= array(
963 'contact_id' => NULL,
967 'activity_type_id' => NULL,
974 public function testSendEmailBasic() {
975 $contactId = $this->individualCreate();
977 // create a logged in USER since the code references it for sendEmail user.
978 $this->createLoggedInUser();
979 $session = CRM_Core_Session
::singleton();
980 $loggedInUser = $session->get('userID');
982 $contact = $this->civicrm_api('contact', 'getsingle', array('id' => $contactId, 'version' => $this->_apiversion
));
983 $contactDetailsIntersectKeys = array(
986 'display_name' => '',
987 'do_not_email' => '',
988 'preferred_mail_format' => '',
993 $contactDetails = array(
994 array_intersect_key($contact, $contactDetailsIntersectKeys),
997 $subject = __FUNCTION__
. ' subject';
998 $html = __FUNCTION__
. ' html';
999 $text = __FUNCTION__
. ' text';
1000 $userID = $loggedInUser;
1002 list($sent, $activity_id) = $email_result = CRM_Activity_BAO_Activity
::sendEmail(
1009 $from = __FUNCTION__
. '@example.com'
1012 $activity = $this->civicrm_api('activity', 'getsingle', array('id' => $activity_id, 'version' => $this->_apiversion
));
1013 $details = "-ALTERNATIVE ITEM 0-
1015 -ALTERNATIVE ITEM 1-
1019 $this->assertEquals($activity['details'], $details, 'Activity details does not match.');
1020 $this->assertEquals($activity['subject'], $subject, 'Activity subject does not match.');
1023 public function testSendEmailWithCampaign() {
1024 // Create a contact and contactDetails array.
1025 $contactId = $this->individualCreate();
1027 // create a logged in USER since the code references it for sendEmail user.
1028 $this->createLoggedInUser();
1029 $session = CRM_Core_Session
::singleton();
1030 $loggedInUser = $session->get('userID');
1032 $contact = $this->civicrm_api('contact', 'getsingle', array('id' => $contactId, 'version' => $this->_apiversion
));
1033 $contactDetailsIntersectKeys = array(
1036 'display_name' => '',
1037 'do_not_email' => '',
1038 'preferred_mail_format' => '',
1039 'is_deceased' => '',
1043 $contactDetails = array(
1044 array_intersect_key($contact, $contactDetailsIntersectKeys),
1047 // Create a campaign.
1048 $result = $this->civicrm_api('Campaign', 'create', array(
1049 'version' => $this->_apiversion
,
1050 'title' => __FUNCTION__
. ' campaign',
1052 $campaign_id = $result['id'];
1054 $subject = __FUNCTION__
. ' subject';
1055 $html = __FUNCTION__
. ' html';
1056 $text = __FUNCTION__
. ' text';
1057 $userID = $loggedInUser;
1059 list($sent, $activity_id) = $email_result = CRM_Activity_BAO_Activity
::sendEmail(
1066 $from = __FUNCTION__
. '@example.com',
1067 $attachments = NULL,
1071 $additionalDetails = NULL,
1075 $activity = $this->civicrm_api('activity', 'getsingle', array('id' => $activity_id, 'version' => $this->_apiversion
));
1076 $this->assertEquals($activity['campaign_id'], $campaign_id, 'Activity campaign_id does not match.');