2 require_once 'CiviTest/CiviUnitTestCase.php';
3 require_once 'CiviTest/Contact.php';
6 * Class CRM_Activity_BAO_ActivityTest
8 class CRM_Activity_BAO_ActivityTest
extends CiviUnitTestCase
{
14 'name' => 'Activity BAOs',
15 'description' => 'Test all Activity_BAO_Activity methods.',
16 'group' => 'CiviCRM BAO Tests',
25 // truncate a few tables
26 $tablesToTruncate = array('civicrm_contact', 'civicrm_activity', 'civicrm_activity_contact');
27 $this->quickCleanup($tablesToTruncate);
31 * Testcases for create() method
32 * create() method Add/Edit activity.
34 function testCreate() {
35 $contactId = Contact
::createIndividual();
38 'source_contact_id' => $contactId,
39 'subject' => 'Scheduling Meeting',
40 'activity_type_id' => 2,
43 CRM_Activity_BAO_Activity
::create($params);
45 $activityId = $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id',
46 'subject', 'Database check for created activity.'
49 // Now call create() to modify an existing Activity
54 'source_contact_id' => $contactId,
55 'subject' => 'Scheduling Interview',
56 'activity_type_id' => 3,
59 CRM_Activity_BAO_Activity
::create($params);
61 $activityTypeId = $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Interview',
63 'subject', 'Database check on updated activity record.'
65 $this->assertEquals($activityTypeId, 3, 'Verify activity type id is 3.');
67 Contact
::delete($contactId);
71 * Testcase for getContactActivity() method.
72 * getContactActivity() method get activities detail for given target contact id
74 function testGetContactActivity() {
75 $contactId = Contact
::createIndividual();
77 'first_name' => 'liz',
78 'last_name' => 'hurleey',
80 $targetContactId = Contact
::createIndividual($params);
83 'source_contact_id' => $contactId,
84 'subject' => 'Scheduling Meeting',
85 'activity_type_id' => 2,
86 'target_contact_id' => array($targetContactId),
87 'activity_date_time' => date('Ymd'),
90 CRM_Activity_BAO_Activity
::create($params);
92 $activityId = $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting',
94 'subject', 'Database check for created activity.'
97 $activities = CRM_Activity_BAO_Activity
::getContactActivity($targetContactId);
99 $this->assertEquals($activities[$activityId]['subject'], 'Scheduling Meeting', 'Verify activity subject is correct.');
101 Contact
::delete($contactId);
102 Contact
::delete($targetContactId);
106 * Testcase for retrieve() method.
107 * retrieve($params, $defaults) method return activity detail for given params
110 function testRetrieve() {
111 $contactId = Contact
::createIndividual();
113 'first_name' => 'liz',
114 'last_name' => 'hurleey',
116 $targetContactId = Contact
::createIndividual($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 $activityId = $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id',
129 'subject', 'Database check for created activity.'
132 $activityTargetId = $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 Contact
::delete($contactId);
150 Contact
::delete($targetContactId);
154 * Testcase for deleteActivity() method.
155 * deleteActivity($params) method deletes activity for given params.
157 function testDeleteActivity() {
158 $contactId = Contact
::createIndividual();
160 'first_name' => 'liz',
161 'last_name' => 'hurleey',
163 $targetContactId = Contact
::createIndividual($params);
166 'source_contact_id' => $contactId,
167 'source_record_id' => $contactId,
168 'subject' => 'Scheduling Meeting',
169 'activity_type_id' => 2,
170 'target_contact_id' => array($targetContactId),
171 'activity_date_time' => date('Ymd'),
174 CRM_Activity_BAO_Activity
::create($params);
176 $activityId = $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id',
177 'subject', 'Database check for created activity.'
180 $activityTargetId = $this->assertDBNotNull('CRM_Activity_DAO_ActivityContact', $targetContactId,
182 'Database check for created activity target.'
185 'source_contact_id' => $contactId,
186 'source_record_id' => $contactId,
187 'subject' => 'Scheduling Meeting',
188 'activity_type_id' => 2,
191 $result = CRM_Activity_BAO_Activity
::deleteActivity($params);
193 $activityId = $this->assertDBNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id',
194 'subject', 'Database check for deleted activity.'
196 Contact
::delete($contactId);
197 Contact
::delete($targetContactId);
201 * Testcase for deleteActivityTarget() method.
202 * deleteActivityTarget($activityId) method deletes activity target for given activity id.
204 function testDeleteActivityTarget() {
205 $contactId = Contact
::createIndividual();
207 'first_name' => 'liz',
208 'last_name' => 'hurleey',
210 $targetContactId = Contact
::createIndividual($params);
213 'source_contact_id' => $contactId,
214 'subject' => 'Scheduling Meeting',
215 'activity_type_id' => 2,
216 'target_contact_id' => array($targetContactId),
217 'activity_date_time' => date('Ymd'),
220 CRM_Activity_BAO_Activity
::create($params);
222 $activityId = $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id',
223 'subject', 'Database check for created activity.'
226 $activityTargetId = $this->assertDBNotNull('CRM_Activity_DAO_ActivityContact', $targetContactId,
228 'Database check for created activity target.'
231 CRM_Activity_BAO_Activity
::deleteActivityContact($activityId, 3);
233 $this->assertDBNull('CRM_Activity_DAO_ActivityContact', $targetContactId, 'id',
234 'contact_id', 'Database check for deleted activity target.'
237 Contact
::delete($contactId);
238 Contact
::delete($targetContactId);
242 * Testcase for deleteActivityAssignment() method.
243 * deleteActivityAssignment($activityId) method deletes activity assignment for given activity id.
245 function testDeleteActivityAssignment() {
246 $contactId = Contact
::createIndividual();
248 'first_name' => 'liz',
249 'last_name' => 'hurleey',
251 $assigneeContactId = Contact
::createIndividual($params);
254 'source_contact_id' => $contactId,
255 'subject' => 'Scheduling Meeting',
256 'activity_type_id' => 2,
257 'assignee_contact_id' => array($assigneeContactId),
258 'activity_date_time' => date('Ymd'),
261 CRM_Activity_BAO_Activity
::create($params);
263 $activityId = $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id',
264 'subject', 'Database check for created activity.'
267 $activityAssignmentId = $this->assertDBNotNull('CRM_Activity_DAO_ActivityContact',
268 $assigneeContactId, 'id', 'contact_id',
269 'Database check for created activity assignment.'
272 CRM_Activity_BAO_Activity
::deleteActivityContact($activityId, 1);
274 $this->assertDBNull('CRM_Activity_DAO_ActivityContact', $assigneeContactId, 'id',
275 'contact_id', 'Database check for deleted activity assignment.'
278 Contact
::delete($contactId);
279 Contact
::delete($assigneeContactId);
283 * Test getActivitiesCount BAO method
285 function testGetActivitiesCountforAdminDashboard() {
286 $op = new PHPUnit_Extensions_Database_Operation_Insert();
287 $op->execute($this->_dbconn
,
288 $this->createFlatXMLDataSet(
289 dirname(__FILE__
) . '/activities_for_dashboard_count.xml'
294 'contact_id' => NULL,
298 'activity_type_id' => NULL,
303 $activityCount = CRM_Activity_BAO_Activity
::getActivitiesCount($params);
305 //since we are loading activities from dataset, we know total number of activities
306 // 8 schedule activities that should be shown on dashboard
308 $this->assertEquals($count, $activityCount, 'In line ' . __LINE__
);
312 * Test getActivitiesCount BAO method
314 function testGetActivitiesCountforNonAdminDashboard() {
315 $op = new PHPUnit_Extensions_Database_Operation_Insert();
316 $op->execute($this->_dbconn
,
317 $this->createFlatXMLDataSet(
318 dirname(__FILE__
) . '/activities_for_dashboard_count.xml'
327 'activity_type_id' => NULL,
333 $activityCount = CRM_Activity_BAO_Activity
::getActivitiesCount($params);
335 //since we are loading activities from dataset, we know total number of activities for this contact
336 // 5 activities ( 2 scheduled, 3 Completed ), note that dashboard shows only scheduled activities
338 $this->assertEquals($count, $activityCount, 'In line ' . __LINE__
);
342 * Test getActivitiesCount BAO method
344 function testGetActivitiesCountforContactSummary() {
345 $op = new PHPUnit_Extensions_Database_Operation_Insert();
346 $op->execute($this->_dbconn
,
347 $this->createFlatXMLDataSet(
348 dirname(__FILE__
) . '/activities_for_dashboard_count.xml'
356 'context' => 'activity',
357 'activity_type_id' => NULL,
362 $activityCount = CRM_Activity_BAO_Activity
::getActivitiesCount($params);
364 //since we are loading activities from dataset, we know total number of activities for this contact
365 // 5 activities, Contact Summary should show all activities
367 $this->assertEquals($count, $activityCount, 'In line ' . __LINE__
);
371 * Test getActivitiesCount BAO method
373 function testGetActivitiesCountforContactSummaryWithNoActivities() {
374 $op = new PHPUnit_Extensions_Database_Operation_Insert();
375 $op->execute($this->_dbconn
,
376 $this->createFlatXMLDataSet(
377 dirname(__FILE__
) . '/activities_for_dashboard_count.xml'
386 'activity_type_id' => NULL,
391 $activityCount = CRM_Activity_BAO_Activity
::getActivitiesCount($params);
393 //since we are loading activities from dataset, we know total number of activities for this contact
394 // this contact does not have any activity
395 $this->assertEquals(0, $activityCount, 'In line ' . __LINE__
);
399 * Test getActivities BAO method
401 function testGetActivitiesforAdminDashboard() {
402 $op = new PHPUnit_Extensions_Database_Operation_Insert();
403 $op->execute($this->_dbconn
,
404 $this->createFlatXMLDataSet(
405 dirname(__FILE__
) . '/activities_for_dashboard_count.xml'
414 'activity_type_id' => NULL,
419 $activities = CRM_Activity_BAO_Activity
::getActivities($params);
421 //since we are loading activities from dataset, we know total number of activities
422 // 8 schedule activities that should be shown on dashboard
424 $this->assertEquals($count, sizeof($activities), 'In line ' . __LINE__
);
426 foreach ($activities as $key => $value) {
427 $this->assertEquals($value['subject'], "subject {$key}", 'Verify activity subject is correct.');
428 $this->assertEquals($value['activity_type_id'], 2, 'Verify activity type is correct.');
429 $this->assertEquals($value['status_id'], 1, 'Verify all activities are scheduled.');
434 * Test getActivities BAO method
436 function testGetActivitiesforNonAdminDashboard() {
437 $op = new PHPUnit_Extensions_Database_Operation_Insert();
438 $op->execute($this->_dbconn
,
439 $this->createFlatXMLDataSet(
440 dirname(__FILE__
) . '/activities_for_dashboard_count.xml'
446 'contact_id' => $contactID,
450 'activity_type_id' => NULL,
455 $activities = CRM_Activity_BAO_Activity
::getActivities($params);
457 //since we are loading activities from dataset, we know total number of activities for this contact
458 // 5 activities ( 2 scheduled, 3 Completed ), note that dashboard shows only scheduled activities
460 $this->assertEquals($count, sizeof($activities), 'In line ' . __LINE__
);
462 foreach ($activities as $key => $value) {
463 $this->assertEquals($value['subject'], "subject {$key}", 'Verify activity subject is correct.');
464 $this->assertEquals($value['activity_type_id'], 2, 'Verify activity type is correct.');
465 $this->assertEquals($value['status_id'], 1, 'Verify all activities are scheduled.');
468 $this->assertArrayHasKey($contactID, $value['target_contact_name']);
471 $this->assertArrayHasKey($contactID, $value['assignee_contact_name']);
477 * Test getActivities BAO method
479 function testGetActivitiesforContactSummary() {
480 $op = new PHPUnit_Extensions_Database_Operation_Insert();
481 $op->execute($this->_dbconn
,
482 $this->createFlatXMLDataSet(
483 dirname(__FILE__
) . '/activities_for_dashboard_count.xml'
489 'contact_id' => $contactID,
492 'context' => 'activity',
493 'activity_type_id' => NULL,
498 $activities = CRM_Activity_BAO_Activity
::getActivities($params);
500 //since we are loading activities from dataset, we know total number of activities for this contact
501 // 5 activities, Contact Summary should show all activities
503 $this->assertEquals($count, sizeof($activities), 'In line ' . __LINE__
);
505 foreach ($activities as $key => $value) {
506 $this->assertEquals($value['subject'], "subject {$key}", 'Verify activity subject is correct.');
509 $this->assertEquals($value['status_id'], 2, 'Verify all activities are scheduled.');
512 $this->assertEquals($value['status_id'], 1, 'Verify all activities are scheduled.');
516 $this->assertEquals($value['activity_type_id'], 1, 'Verify activity type is correct.');
519 $this->assertEquals($value['activity_type_id'], 2, 'Verify activity type is correct.');
523 $this->assertArrayHasKey($contactID, $value['target_contact_name']);
526 $this->assertArrayHasKey($contactID, $value['assignee_contact_name']);
532 * Test getActivities BAO method
534 function testGetActivitiesforContactSummaryWithNoActivities() {
535 $op = new PHPUnit_Extensions_Database_Operation_Insert();
536 $op->execute($this->_dbconn
,
537 $this->createFlatXMLDataSet(
538 dirname(__FILE__
) . '/activities_for_dashboard_count.xml'
547 'activity_type_id' => NULL,
552 $activities = CRM_Activity_BAO_Activity
::getActivities($params);
554 //since we are loading activities from dataset, we know total number of activities for this contact
555 // This contact does not have any activities
556 $this->assertEquals(0, sizeof($activities), 'In line ' . __LINE__
);