4 * Class CRM_Activity_BAO_ActivityTest
7 class CRM_Activity_BAO_ActivityTest
extends CiviUnitTestCase
{
8 public function setUp() {
12 public function tearDown() {
13 // truncate a few tables
14 $tablesToTruncate = array('civicrm_contact', 'civicrm_activity', 'civicrm_activity_contact');
15 $this->quickCleanup($tablesToTruncate);
19 * Test case for create() method.
21 public function testCreate() {
22 $contactId = $this->individualCreate();
25 'source_contact_id' => $contactId,
26 'subject' => 'Scheduling Meeting',
27 'activity_type_id' => 2,
30 CRM_Activity_BAO_Activity
::create($params);
32 $activityId = $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id',
33 'subject', 'Database check for created activity.'
36 // Now call create() to modify an existing Activity
40 'source_contact_id' => $contactId,
41 'subject' => 'Scheduling Interview',
42 'activity_type_id' => 3,
45 CRM_Activity_BAO_Activity
::create($params);
47 $activityTypeId = $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Interview',
49 'subject', 'Database check on updated activity record.'
51 $this->assertEquals($activityTypeId, 3, 'Verify activity type id is 3.');
53 $this->contactDelete($contactId);
57 * Test case for getContactActivity() method.
59 * getContactActivity() method get activities detail for given target contact id.
61 public function testGetContactActivity() {
62 $contactId = $this->individualCreate();
64 'first_name' => 'liz',
65 'last_name' => 'hurleey',
67 $targetContactId = $this->individualCreate($params);
70 'source_contact_id' => $contactId,
71 'subject' => 'Scheduling Meeting',
72 'activity_type_id' => 2,
73 'target_contact_id' => array($targetContactId),
74 'activity_date_time' => date('Ymd'),
77 $this->callAPISuccess('Activity', 'create', $params);
79 $activityId = $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting',
81 'subject', 'Database check for created activity.'
84 $activities = CRM_Activity_BAO_Activity
::getContactActivity($targetContactId);
86 $this->assertEquals($activities[$activityId]['subject'], 'Scheduling Meeting', 'Verify activity subject is correct.');
88 $this->contactDelete($contactId);
89 $this->contactDelete($targetContactId);
93 * Test case for retrieve() method.
95 * Retrieve($params, $defaults) method return activity detail for given params
98 public function testRetrieve() {
99 $contactId = $this->individualCreate();
101 'first_name' => 'liz',
102 'last_name' => 'hurleey',
104 $targetContactId = $this->individualCreate($params);
107 'source_contact_id' => $contactId,
108 'subject' => 'Scheduling Meeting',
109 'activity_type_id' => 2,
110 'target_contact_id' => array($targetContactId),
111 'activity_date_time' => date('Ymd'),
114 CRM_Activity_BAO_Activity
::create($params);
116 $activityId = $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id',
117 'subject', 'Database check for created activity.'
120 $activityTargetId = $this->assertDBNotNull('CRM_Activity_DAO_ActivityContact', $targetContactId,
122 'Database check for created activity target.'
126 $activity = CRM_Activity_BAO_Activity
::retrieve($params, $defaults);
128 $this->assertEquals($activity->subject
, 'Scheduling Meeting', 'Verify activity subject is correct.');
129 $this->assertEquals($activity->activity_type_id
, 2, 'Verify activity type id is correct.');
130 $this->assertEquals($defaults['source_contact_id'], $contactId, 'Verify source contact id is correct.');
132 $this->assertEquals($defaults['subject'], 'Scheduling Meeting', 'Verify activity subject is correct.');
133 $this->assertEquals($defaults['activity_type_id'], 2, 'Verify activity type id is correct.');
135 $this->assertEquals($defaults['target_contact'][0], $targetContactId, 'Verify target contact id is correct.');
137 $this->contactDelete($contactId);
138 $this->contactDelete($targetContactId);
142 * Test case for deleteActivity() method.
144 * deleteActivity($params) method deletes activity for given params.
146 public function testDeleteActivity() {
147 $contactId = $this->individualCreate();
149 'first_name' => 'liz',
150 'last_name' => 'hurleey',
152 $targetContactId = $this->individualCreate($params);
155 'source_contact_id' => $contactId,
156 'source_record_id' => $contactId,
157 'subject' => 'Scheduling Meeting',
158 'activity_type_id' => 2,
159 'target_contact_id' => array($targetContactId),
160 'activity_date_time' => date('Ymd'),
163 CRM_Activity_BAO_Activity
::create($params);
165 $activityId = $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id',
166 'subject', 'Database check for created activity.'
169 $activityTargetId = $this->assertDBNotNull('CRM_Activity_DAO_ActivityContact', $targetContactId,
171 'Database check for created activity target.'
174 'source_contact_id' => $contactId,
175 'source_record_id' => $contactId,
176 'subject' => 'Scheduling Meeting',
177 'activity_type_id' => 2,
180 CRM_Activity_BAO_Activity
::deleteActivity($params);
182 $this->assertDBNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id',
183 'subject', 'Database check for deleted activity.'
185 $this->contactDelete($contactId);
186 $this->contactDelete($targetContactId);
190 * Test case for deleteActivityTarget() method.
192 * deleteActivityTarget($activityId) method deletes activity target for given activity id.
194 public function testDeleteActivityTarget() {
195 $contactId = $this->individualCreate();
197 'first_name' => 'liz',
198 'last_name' => 'hurleey',
200 $targetContactId = $this->individualCreate($params);
203 'source_contact_id' => $contactId,
204 'subject' => 'Scheduling Meeting',
205 'activity_type_id' => 2,
206 'target_contact_id' => array($targetContactId),
207 'activity_date_time' => date('Ymd'),
210 CRM_Activity_BAO_Activity
::create($params);
212 $activityId = $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id',
213 'subject', 'Database check for created activity.'
216 $activityTargetId = $this->assertDBNotNull('CRM_Activity_DAO_ActivityContact', $targetContactId,
218 'Database check for created activity target.'
221 CRM_Activity_BAO_Activity
::deleteActivityContact($activityId, 3);
223 $this->assertDBNull('CRM_Activity_DAO_ActivityContact', $targetContactId, 'id',
224 'contact_id', 'Database check for deleted activity target.'
227 $this->contactDelete($contactId);
228 $this->contactDelete($targetContactId);
232 * Test case for deleteActivityAssignment() method.
234 * deleteActivityAssignment($activityId) method deletes activity assignment for given activity id.
236 public function testDeleteActivityAssignment() {
237 $contactId = $this->individualCreate();
239 'first_name' => 'liz',
240 'last_name' => 'hurleey',
242 $assigneeContactId = $this->individualCreate($params);
245 'source_contact_id' => $contactId,
246 'subject' => 'Scheduling Meeting',
247 'activity_type_id' => 2,
248 'assignee_contact_id' => array($assigneeContactId),
249 'activity_date_time' => date('Ymd'),
252 CRM_Activity_BAO_Activity
::create($params);
254 $activityId = $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id',
255 'subject', 'Database check for created activity.'
258 $activityAssignmentId = $this->assertDBNotNull('CRM_Activity_DAO_ActivityContact',
259 $assigneeContactId, 'id', 'contact_id',
260 'Database check for created activity assignment.'
263 CRM_Activity_BAO_Activity
::deleteActivityContact($activityId, 1);
265 $this->assertDBNull('CRM_Activity_DAO_ActivityContact', $assigneeContactId, 'id',
266 'contact_id', 'Database check for deleted activity assignment.'
269 $this->contactDelete($contactId);
270 $this->contactDelete($assigneeContactId);
274 * Test getActivitiesCount BAO method.
276 public function testGetActivitiesCountforAdminDashboard() {
277 $op = new PHPUnit_Extensions_Database_Operation_Insert();
278 $op->execute($this->_dbconn
,
279 $this->createFlatXMLDataSet(
280 dirname(__FILE__
) . '/activities_for_dashboard_count.xml'
285 'contact_id' => NULL,
289 'activity_type_id' => NULL,
294 $activityCount = CRM_Activity_BAO_Activity
::getActivitiesCount($params);
296 //since we are loading activities from dataset, we know total number of activities
297 // 8 schedule activities that should be shown on dashboard
299 $this->assertEquals($count, $activityCount);
303 * Test getActivitiesCount BAO method.
305 public function testGetActivitiesCountforNonAdminDashboard() {
306 $op = new PHPUnit_Extensions_Database_Operation_Insert();
307 $op->execute($this->_dbconn
,
308 $this->createFlatXMLDataSet(
309 dirname(__FILE__
) . '/activities_for_dashboard_count.xml'
318 'activity_type_id' => NULL,
324 $activityCount = CRM_Activity_BAO_Activity
::getActivitiesCount($params);
326 //since we are loading activities from dataset, we know total number of activities for this contact
327 // 5 activities ( 2 scheduled, 3 Completed ), note that dashboard shows only scheduled activities
329 $this->assertEquals($count, $activityCount);
333 * Test getActivitiesCount BAO method.
335 public function testGetActivitiesCountforContactSummary() {
336 $op = new PHPUnit_Extensions_Database_Operation_Insert();
337 $op->execute($this->_dbconn
,
338 $this->createFlatXMLDataSet(
339 dirname(__FILE__
) . '/activities_for_dashboard_count.xml'
347 'context' => 'activity',
348 'activity_type_id' => NULL,
353 $activityCount = CRM_Activity_BAO_Activity
::getActivitiesCount($params);
355 //since we are loading activities from dataset, we know total number of activities for this contact
356 // 5 activities, Contact Summary should show all activities
358 $this->assertEquals($count, $activityCount);
362 * CRM-18706 - Test Include/Exclude Activity Filters
364 public function testActivityFilters() {
365 $op = new PHPUnit_Extensions_Database_Operation_Insert();
366 $op->execute($this->_dbconn
,
367 $this->createFlatXMLDataSet(
368 dirname(__FILE__
) . '/activities_for_dashboard_count.xml'
375 'context' => 'activity',
376 'activity_type_id' => 1,
379 $obj = new CRM_Activity_Page_AJAX();
381 $activities = $obj->getContactActivity();
382 // This should include activities of type Meeting only.
383 foreach ($activities['data'] as $key => $value) {
384 $this->assertEquals('Meeting', $value['activity_type']);
386 unset($_GET['activity_type_id']);
388 $_GET['activity_type_exclude_id'] = 1;
389 $activities = $obj->getContactActivity();
390 // None of the activities should be of type Meeting.
391 foreach ($activities['data'] as $key => $value) {
392 $this->assertNotEquals('Meeting', $value['activity_type']);
397 * Test getActivitiesCount BAO method.
399 public function testGetActivitiesCountforContactSummaryWithNoActivities() {
400 $op = new PHPUnit_Extensions_Database_Operation_Insert();
401 $op->execute($this->_dbconn
,
402 $this->createFlatXMLDataSet(
403 dirname(__FILE__
) . '/activities_for_dashboard_count.xml'
412 'activity_type_id' => NULL,
417 $activityCount = CRM_Activity_BAO_Activity
::getActivitiesCount($params);
419 //since we are loading activities from dataset, we know total number of activities for this contact
420 // this contact does not have any activity
421 $this->assertEquals(0, $activityCount);
425 * Test getActivities BAO method.
427 public function testGetActivitiesforAdminDashboard() {
428 $op = new PHPUnit_Extensions_Database_Operation_Insert();
429 $op->execute($this->_dbconn
,
430 $this->createFlatXMLDataSet(
431 dirname(__FILE__
) . '/activities_for_dashboard_count.xml'
440 'activity_type_id' => NULL,
445 $activities = CRM_Activity_BAO_Activity
::getActivities($params);
447 //since we are loading activities from dataset, we know total number of activities
448 // 8 schedule activities that should be shown on dashboard
450 $this->assertEquals($count, count($activities));
452 foreach ($activities as $key => $value) {
453 $this->assertEquals($value['subject'], "subject {$key}", 'Verify activity subject is correct.');
454 $this->assertEquals($value['activity_type_id'], 2, 'Verify activity type is correct.');
455 $this->assertEquals($value['status_id'], 1, 'Verify all activities are scheduled.');
460 * Test getActivities BAO method.
462 public function testGetActivitiesforNonAdminDashboard() {
463 $op = new PHPUnit_Extensions_Database_Operation_Insert();
464 $op->execute($this->_dbconn
,
465 $this->createFlatXMLDataSet(
466 dirname(__FILE__
) . '/activities_for_dashboard_count.xml'
472 'contact_id' => $contactID,
476 'activity_type_id' => NULL,
481 $activities = CRM_Activity_BAO_Activity
::getActivities($params);
483 //since we are loading activities from dataset, we know total number of activities for this contact
484 // 5 activities ( 2 scheduled, 3 Completed ), note that dashboard shows only scheduled activities
486 $this->assertEquals($count, count($activities));
488 foreach ($activities as $key => $value) {
489 $this->assertEquals($value['subject'], "subject {$key}", 'Verify activity subject is correct.');
490 $this->assertEquals($value['activity_type_id'], 2, 'Verify activity type is correct.');
491 $this->assertEquals($value['status_id'], 1, 'Verify all activities are scheduled.');
494 $this->assertArrayHasKey($contactID, $value['target_contact_name']);
497 $this->assertArrayHasKey($contactID, $value['assignee_contact_name']);
503 * Test target contact count.
505 public function testTargetCountforContactSummary() {
507 $contactId = $this->individualCreate();
508 for ($i = 0; $i < $targetCount; $i++
) {
509 $targetContactIDs[] = $this->individualCreate(array(), $i);
511 // create activities with 5 target contacts
512 $activityParams = array(
513 'source_contact_id' => $contactId,
514 'target_contact_id' => $targetContactIDs,
516 $this->activityCreate($activityParams);
519 'contact_id' => $contactId,
520 'context' => 'activity',
522 $activities = CRM_Activity_BAO_Activity
::getActivities($params);
524 //verify target count
525 $this->assertEquals($targetCount, $activities[1]['target_contact_counter']);
529 * Test getActivities BAO method.
531 public function testGetActivitiesforContactSummary() {
532 $op = new PHPUnit_Extensions_Database_Operation_Insert();
533 $op->execute($this->_dbconn
,
534 $this->createFlatXMLDataSet(
535 dirname(__FILE__
) . '/activities_for_dashboard_count.xml'
541 'contact_id' => $contactID,
544 'context' => 'activity',
545 'activity_type_id' => NULL,
550 $activities = CRM_Activity_BAO_Activity
::getActivities($params);
552 //since we are loading activities from dataset, we know total number of activities for this contact
553 // 5 activities, Contact Summary should show all activities
555 $this->assertEquals($count, count($activities));
557 foreach ($activities as $key => $value) {
558 $this->assertEquals($value['subject'], "subject {$key}", 'Verify activity subject is correct.');
561 $this->assertEquals($value['status_id'], 2, 'Verify all activities are scheduled.');
564 $this->assertEquals($value['status_id'], 1, 'Verify all activities are scheduled.');
568 $this->assertEquals($value['activity_type_id'], 1, 'Verify activity type is correct.');
571 $this->assertEquals($value['activity_type_id'], 2, 'Verify activity type is correct.');
575 $this->assertArrayHasKey($contactID, $value['target_contact_name']);
578 $this->assertArrayHasKey($contactID, $value['assignee_contact_name']);
584 * Test getActivities BAO method.
586 public function testGetActivitiesforContactSummaryWithNoActivities() {
587 $op = new PHPUnit_Extensions_Database_Operation_Insert();
588 $op->execute($this->_dbconn
,
589 $this->createFlatXMLDataSet(
590 dirname(__FILE__
) . '/activities_for_dashboard_count.xml'
599 'activity_type_id' => NULL,
604 $activities = CRM_Activity_BAO_Activity
::getActivities($params);
606 //since we are loading activities from dataset, we know total number of activities for this contact
607 // This contact does not have any activities
608 $this->assertEquals(0, count($activities));