Commit | Line | Data |
---|---|---|
6a488035 | 1 | <?php |
0eea664b | 2 | |
aba1cd8b EM |
3 | /** |
4 | * Class CRM_Activity_BAO_ActivityTest | |
acb109b7 | 5 | * @group headless |
aba1cd8b | 6 | */ |
6a488035 | 7 | class CRM_Activity_BAO_ActivityTest extends CiviUnitTestCase { |
00be9182 | 8 | public function setUp() { |
6a488035 | 9 | parent::setUp(); |
cbcedb39 | 10 | $this->prepareForACLs(); |
11 | CRM_Core_Config::singleton()->userPermissionClass->permissions = array('view all contacts', 'access CiviCRM'); | |
6a488035 TO |
12 | } |
13 | ||
cbcedb39 | 14 | /** |
15 | * Clean up after tests. | |
16 | */ | |
00be9182 | 17 | public function tearDown() { |
824989b9 | 18 | $tablesToTruncate = array( |
824989b9 AS |
19 | 'civicrm_activity', |
20 | 'civicrm_activity_contact', | |
21 | 'civicrm_uf_match', | |
22 | 'civicrm_campaign', | |
23 | 'civicrm_email', | |
24 | ); | |
6a488035 | 25 | $this->quickCleanup($tablesToTruncate); |
cbcedb39 | 26 | $this->cleanUpAfterACLs(); |
27 | parent::tearDown(); | |
6a488035 TO |
28 | } |
29 | ||
30 | /** | |
fe482240 | 31 | * Test case for create() method. |
6a488035 | 32 | */ |
00be9182 | 33 | public function testCreate() { |
f7969dcf | 34 | $contactId = $this->individualCreate(); |
6a488035 TO |
35 | |
36 | $params = array( | |
37 | 'source_contact_id' => $contactId, | |
38 | 'subject' => 'Scheduling Meeting', | |
39 | 'activity_type_id' => 2, | |
40 | ); | |
41 | ||
42 | CRM_Activity_BAO_Activity::create($params); | |
43 | ||
44 | $activityId = $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id', | |
45 | 'subject', 'Database check for created activity.' | |
46 | ); | |
47 | ||
cbcedb39 | 48 | // Now call create() to modify an existing Activity. |
6a488035 TO |
49 | $params = array( |
50 | 'id' => $activityId, | |
51 | 'source_contact_id' => $contactId, | |
52 | 'subject' => 'Scheduling Interview', | |
53 | 'activity_type_id' => 3, | |
54 | ); | |
55 | ||
56 | CRM_Activity_BAO_Activity::create($params); | |
57 | ||
58 | $activityTypeId = $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Interview', | |
59 | 'activity_type_id', | |
60 | 'subject', 'Database check on updated activity record.' | |
61 | ); | |
62 | $this->assertEquals($activityTypeId, 3, 'Verify activity type id is 3.'); | |
63 | ||
93ac19cd | 64 | $this->contactDelete($contactId); |
6a488035 TO |
65 | } |
66 | ||
67 | /** | |
fe482240 EM |
68 | * Test case for getContactActivity() method. |
69 | * | |
70 | * getContactActivity() method get activities detail for given target contact id. | |
6a488035 | 71 | */ |
00be9182 | 72 | public function testGetContactActivity() { |
f7969dcf | 73 | $contactId = $this->individualCreate(); |
6a488035 TO |
74 | $params = array( |
75 | 'first_name' => 'liz', | |
76 | 'last_name' => 'hurleey', | |
77 | ); | |
f7969dcf | 78 | $targetContactId = $this->individualCreate($params); |
6a488035 TO |
79 | |
80 | $params = array( | |
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'), | |
86 | ); | |
87 | ||
f7969dcf | 88 | $this->callAPISuccess('Activity', 'create', $params); |
6a488035 TO |
89 | |
90 | $activityId = $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', | |
91 | 'id', | |
92 | 'subject', 'Database check for created activity.' | |
93 | ); | |
94 | ||
a59cecb1 | 95 | // @todo - remove this deprecated functions |
6a488035 TO |
96 | $activities = CRM_Activity_BAO_Activity::getContactActivity($targetContactId); |
97 | ||
98 | $this->assertEquals($activities[$activityId]['subject'], 'Scheduling Meeting', 'Verify activity subject is correct.'); | |
99 | ||
93ac19cd | 100 | $this->contactDelete($contactId); |
101 | $this->contactDelete($targetContactId); | |
6a488035 TO |
102 | } |
103 | ||
104 | /** | |
fe482240 EM |
105 | * Test case for retrieve() method. |
106 | * | |
107 | * Retrieve($params, $defaults) method return activity detail for given params | |
6a488035 TO |
108 | * and set defaults. |
109 | */ | |
00be9182 | 110 | public function testRetrieve() { |
f7969dcf | 111 | $contactId = $this->individualCreate(); |
6a488035 TO |
112 | $params = array( |
113 | 'first_name' => 'liz', | |
114 | 'last_name' => 'hurleey', | |
115 | ); | |
f7969dcf | 116 | $targetContactId = $this->individualCreate($params); |
6a488035 TO |
117 | |
118 | $params = array( | |
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'), | |
124 | ); | |
125 | ||
126 | CRM_Activity_BAO_Activity::create($params); | |
127 | ||
cbcedb39 | 128 | $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id', |
6a488035 TO |
129 | 'subject', 'Database check for created activity.' |
130 | ); | |
131 | ||
cbcedb39 | 132 | $this->assertDBNotNull('CRM_Activity_DAO_ActivityContact', $targetContactId, |
f1c7b1f0 | 133 | 'id', 'contact_id', |
6a488035 TO |
134 | 'Database check for created activity target.' |
135 | ); | |
136 | ||
137 | $defaults = array(); | |
138 | $activity = CRM_Activity_BAO_Activity::retrieve($params, $defaults); | |
139 | ||
140 | $this->assertEquals($activity->subject, 'Scheduling Meeting', 'Verify activity subject is correct.'); | |
6a488035 | 141 | $this->assertEquals($activity->activity_type_id, 2, 'Verify activity type id is correct.'); |
b2e56051 | 142 | $this->assertEquals($defaults['source_contact_id'], $contactId, 'Verify source contact id is correct.'); |
6a488035 TO |
143 | |
144 | $this->assertEquals($defaults['subject'], 'Scheduling Meeting', 'Verify activity subject is correct.'); | |
6a488035 TO |
145 | $this->assertEquals($defaults['activity_type_id'], 2, 'Verify activity type id is correct.'); |
146 | ||
147 | $this->assertEquals($defaults['target_contact'][0], $targetContactId, 'Verify target contact id is correct.'); | |
148 | ||
93ac19cd | 149 | $this->contactDelete($contactId); |
150 | $this->contactDelete($targetContactId); | |
6a488035 TO |
151 | } |
152 | ||
153 | /** | |
fe482240 EM |
154 | * Test case for deleteActivity() method. |
155 | * | |
6a488035 TO |
156 | * deleteActivity($params) method deletes activity for given params. |
157 | */ | |
00be9182 | 158 | public function testDeleteActivity() { |
f7969dcf | 159 | $contactId = $this->individualCreate(); |
6a488035 TO |
160 | $params = array( |
161 | 'first_name' => 'liz', | |
162 | 'last_name' => 'hurleey', | |
163 | ); | |
f7969dcf | 164 | $targetContactId = $this->individualCreate($params); |
6a488035 TO |
165 | |
166 | $params = array( | |
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'), | |
173 | ); | |
174 | ||
175 | CRM_Activity_BAO_Activity::create($params); | |
176 | ||
cbcedb39 | 177 | $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id', |
6a488035 TO |
178 | 'subject', 'Database check for created activity.' |
179 | ); | |
180 | ||
cbcedb39 | 181 | $this->assertDBNotNull('CRM_Activity_DAO_ActivityContact', $targetContactId, |
f1c7b1f0 | 182 | 'id', 'contact_id', |
6a488035 TO |
183 | 'Database check for created activity target.' |
184 | ); | |
185 | $params = array( | |
186 | 'source_contact_id' => $contactId, | |
187 | 'source_record_id' => $contactId, | |
188 | 'subject' => 'Scheduling Meeting', | |
189 | 'activity_type_id' => 2, | |
190 | ); | |
191 | ||
93ac19cd | 192 | CRM_Activity_BAO_Activity::deleteActivity($params); |
6a488035 | 193 | |
93ac19cd | 194 | $this->assertDBNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id', |
6a488035 TO |
195 | 'subject', 'Database check for deleted activity.' |
196 | ); | |
93ac19cd | 197 | $this->contactDelete($contactId); |
198 | $this->contactDelete($targetContactId); | |
6a488035 TO |
199 | } |
200 | ||
201 | /** | |
fe482240 EM |
202 | * Test case for deleteActivityTarget() method. |
203 | * | |
6a488035 TO |
204 | * deleteActivityTarget($activityId) method deletes activity target for given activity id. |
205 | */ | |
00be9182 | 206 | public function testDeleteActivityTarget() { |
f7969dcf | 207 | $contactId = $this->individualCreate(); |
6a488035 TO |
208 | $params = array( |
209 | 'first_name' => 'liz', | |
210 | 'last_name' => 'hurleey', | |
211 | ); | |
f7969dcf | 212 | $targetContactId = $this->individualCreate($params); |
6a488035 TO |
213 | |
214 | $params = array( | |
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'), | |
220 | ); | |
221 | ||
222 | CRM_Activity_BAO_Activity::create($params); | |
223 | ||
224 | $activityId = $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id', | |
225 | 'subject', 'Database check for created activity.' | |
226 | ); | |
227 | ||
cbcedb39 | 228 | $this->assertDBNotNull('CRM_Activity_DAO_ActivityContact', $targetContactId, |
f1c7b1f0 | 229 | 'id', 'contact_id', |
6a488035 TO |
230 | 'Database check for created activity target.' |
231 | ); | |
232 | ||
2517d079 | 233 | CRM_Activity_BAO_Activity::deleteActivityContact($activityId, 3); |
6a488035 | 234 | |
f1c7b1f0 DL |
235 | $this->assertDBNull('CRM_Activity_DAO_ActivityContact', $targetContactId, 'id', |
236 | 'contact_id', 'Database check for deleted activity target.' | |
6a488035 TO |
237 | ); |
238 | ||
93ac19cd | 239 | $this->contactDelete($contactId); |
240 | $this->contactDelete($targetContactId); | |
6a488035 TO |
241 | } |
242 | ||
243 | /** | |
fe482240 EM |
244 | * Test case for deleteActivityAssignment() method. |
245 | * | |
6a488035 TO |
246 | * deleteActivityAssignment($activityId) method deletes activity assignment for given activity id. |
247 | */ | |
00be9182 | 248 | public function testDeleteActivityAssignment() { |
f7969dcf | 249 | $contactId = $this->individualCreate(); |
6a488035 TO |
250 | $params = array( |
251 | 'first_name' => 'liz', | |
252 | 'last_name' => 'hurleey', | |
253 | ); | |
f7969dcf | 254 | $assigneeContactId = $this->individualCreate($params); |
6a488035 TO |
255 | |
256 | $params = array( | |
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'), | |
262 | ); | |
263 | ||
264 | CRM_Activity_BAO_Activity::create($params); | |
265 | ||
266 | $activityId = $this->assertDBNotNull('CRM_Activity_DAO_Activity', 'Scheduling Meeting', 'id', | |
267 | 'subject', 'Database check for created activity.' | |
268 | ); | |
269 | ||
cbcedb39 | 270 | $this->assertDBNotNull('CRM_Activity_DAO_ActivityContact', |
f1c7b1f0 | 271 | $assigneeContactId, 'id', 'contact_id', |
6a488035 TO |
272 | 'Database check for created activity assignment.' |
273 | ); | |
274 | ||
2517d079 | 275 | CRM_Activity_BAO_Activity::deleteActivityContact($activityId, 1); |
6a488035 | 276 | |
f1c7b1f0 DL |
277 | $this->assertDBNull('CRM_Activity_DAO_ActivityContact', $assigneeContactId, 'id', |
278 | 'contact_id', 'Database check for deleted activity assignment.' | |
6a488035 TO |
279 | ); |
280 | ||
93ac19cd | 281 | $this->contactDelete($contactId); |
282 | $this->contactDelete($assigneeContactId); | |
6a488035 TO |
283 | } |
284 | ||
285 | /** | |
5161bb0c | 286 | * Test getActivities BAO method for getting count. |
6a488035 | 287 | */ |
cbcedb39 | 288 | public function testGetActivitiesCountForAdminDashboard() { |
75d842f8 | 289 | $this->setUpForActivityDashboardTests(); |
6ab43e1b | 290 | $activityCount = CRM_Activity_BAO_Activity::deprecatedGetActivitiesCount($this->_params); |
291 | $this->assertEquals(8, $activityCount); | |
292 | $activityCount = CRM_Activity_BAO_Activity::getActivitiesCount($this->_params); | |
75d842f8 | 293 | $this->assertEquals(8, $activityCount); |
6a488035 TO |
294 | } |
295 | ||
296 | /** | |
5161bb0c | 297 | * Test getActivities BAO method for getting count |
6a488035 | 298 | */ |
00be9182 | 299 | public function testGetActivitiesCountforNonAdminDashboard() { |
6a488035 TO |
300 | $op = new PHPUnit_Extensions_Database_Operation_Insert(); |
301 | $op->execute($this->_dbconn, | |
bbfd46a5 | 302 | $this->createFlatXMLDataSet( |
6a488035 TO |
303 | dirname(__FILE__) . '/activities_for_dashboard_count.xml' |
304 | ) | |
305 | ); | |
306 | ||
307 | $params = array( | |
308 | 'contact_id' => 9, | |
309 | 'admin' => FALSE, | |
310 | 'caseId' => NULL, | |
311 | 'context' => 'home', | |
312 | 'activity_type_id' => NULL, | |
313 | 'offset' => 0, | |
314 | 'rowCount' => 0, | |
315 | 'sort' => NULL, | |
316 | ); | |
317 | ||
6ab43e1b | 318 | $activityCount = CRM_Activity_BAO_Activity::deprecatedGetActivitiesCount($params); |
6a488035 TO |
319 | |
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 | |
322 | $count = 2; | |
a15773db | 323 | $this->assertEquals($count, $activityCount); |
6ab43e1b | 324 | $this->assertEquals(2, CRM_Activity_BAO_Activity::getActivitiesCount($params)); |
6a488035 TO |
325 | } |
326 | ||
327 | /** | |
5161bb0c | 328 | * Test getActivities BAO method for getting count |
6a488035 | 329 | */ |
00be9182 | 330 | public function testGetActivitiesCountforContactSummary() { |
6a488035 TO |
331 | $op = new PHPUnit_Extensions_Database_Operation_Insert(); |
332 | $op->execute($this->_dbconn, | |
bbfd46a5 | 333 | $this->createFlatXMLDataSet( |
6a488035 TO |
334 | dirname(__FILE__) . '/activities_for_dashboard_count.xml' |
335 | ) | |
336 | ); | |
337 | ||
338 | $params = array( | |
339 | 'contact_id' => 9, | |
340 | 'admin' => FALSE, | |
341 | 'caseId' => NULL, | |
342 | 'context' => 'activity', | |
343 | 'activity_type_id' => NULL, | |
344 | 'offset' => 0, | |
345 | 'rowCount' => 0, | |
346 | 'sort' => NULL, | |
347 | ); | |
6ab43e1b | 348 | $activityCount = CRM_Activity_BAO_Activity::deprecatedGetActivitiesCount($params); |
6a488035 TO |
349 | |
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 | |
352 | $count = 5; | |
a15773db | 353 | $this->assertEquals($count, $activityCount); |
6ab43e1b | 354 | $this->assertEquals(5, CRM_Activity_BAO_Activity::getActivitiesCount($params)); |
6a488035 TO |
355 | } |
356 | ||
23289ddd | 357 | /** |
358 | * CRM-18706 - Test Include/Exclude Activity Filters | |
359 | */ | |
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' | |
365 | ) | |
366 | ); | |
367 | ||
368 | global $_GET; | |
369 | $_GET = array( | |
370 | 'cid' => 9, | |
371 | 'context' => 'activity', | |
372 | 'activity_type_id' => 1, | |
373 | 'is_unit_test' => 1, | |
374 | ); | |
375 | $obj = new CRM_Activity_Page_AJAX(); | |
376 | ||
377 | $activities = $obj->getContactActivity(); | |
378 | // This should include activities of type Meeting only. | |
cbcedb39 | 379 | foreach ($activities['data'] as $value) { |
8c99c0bb | 380 | $this->assertContains('Meeting', $value['activity_type']); |
23289ddd | 381 | } |
382 | unset($_GET['activity_type_id']); | |
383 | ||
384 | $_GET['activity_type_exclude_id'] = 1; | |
385 | $activities = $obj->getContactActivity(); | |
386 | // None of the activities should be of type Meeting. | |
cbcedb39 | 387 | foreach ($activities['data'] as $value) { |
23289ddd | 388 | $this->assertNotEquals('Meeting', $value['activity_type']); |
389 | } | |
390 | } | |
391 | ||
6a488035 | 392 | /** |
5161bb0c | 393 | * Test getActivities BAO method for getting count |
6a488035 | 394 | */ |
00be9182 | 395 | public function testGetActivitiesCountforContactSummaryWithNoActivities() { |
6a488035 TO |
396 | $op = new PHPUnit_Extensions_Database_Operation_Insert(); |
397 | $op->execute($this->_dbconn, | |
bbfd46a5 | 398 | $this->createFlatXMLDataSet( |
6a488035 TO |
399 | dirname(__FILE__) . '/activities_for_dashboard_count.xml' |
400 | ) | |
401 | ); | |
402 | ||
403 | $params = array( | |
404 | 'contact_id' => 17, | |
405 | 'admin' => FALSE, | |
406 | 'caseId' => NULL, | |
407 | 'context' => 'home', | |
408 | 'activity_type_id' => NULL, | |
409 | 'offset' => 0, | |
410 | 'rowCount' => 0, | |
411 | 'sort' => NULL, | |
412 | ); | |
6ab43e1b | 413 | $activityCount = CRM_Activity_BAO_Activity::deprecatedGetActivitiesCount($params); |
6a488035 TO |
414 | |
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 | |
a15773db | 417 | $this->assertEquals(0, $activityCount); |
6ab43e1b | 418 | $this->assertEquals(0, CRM_Activity_BAO_Activity::getActivitiesCount($params)); |
6a488035 TO |
419 | } |
420 | ||
421 | /** | |
eceb18cc | 422 | * Test getActivities BAO method. |
6a488035 | 423 | */ |
cbcedb39 | 424 | public function testGetActivitiesForAdminDashboard() { |
75d842f8 | 425 | $this->setUpForActivityDashboardTests(); |
6ab43e1b | 426 | $activitiesDeprecatedFn = CRM_Activity_BAO_Activity::deprecatedGetActivities($this->_params); |
427 | $activitiesNew = CRM_Activity_BAO_Activity::getActivities($this->_params); | |
428 | // $this->assertEquals($activities, $activitiesDeprecatedFn); | |
6a488035 TO |
429 | |
430 | //since we are loading activities from dataset, we know total number of activities | |
5161bb0c | 431 | // with no contact ID and there should be 8 schedule activities shown on dashboard |
6a488035 | 432 | $count = 8; |
6ab43e1b | 433 | foreach (array($activitiesNew, $activitiesDeprecatedFn) as $activities) { |
434 | $this->assertEquals($count, count($activities)); | |
6a488035 | 435 | |
6ab43e1b | 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.'); | |
440 | } | |
6a488035 TO |
441 | } |
442 | } | |
443 | ||
75d842f8 | 444 | /** |
445 | * Test getActivities BAO method. | |
446 | */ | |
447 | public function testGetActivitiesForAdminDashboardNoViewContacts() { | |
448 | CRM_Core_Config::singleton()->userPermissionClass->permissions = array('access CiviCRM'); | |
449 | $this->setUpForActivityDashboardTests(); | |
6ab43e1b | 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)); | |
454 | } | |
26583d3e | 455 | } |
456 | ||
457 | /** | |
458 | * Test getActivities BAO method. | |
459 | */ | |
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(); | |
6ab43e1b | 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)); | |
468 | } | |
75d842f8 | 469 | |
470 | } | |
471 | ||
6a488035 | 472 | /** |
eceb18cc | 473 | * Test getActivities BAO method. |
6a488035 | 474 | */ |
00be9182 | 475 | public function testGetActivitiesforNonAdminDashboard() { |
6a488035 TO |
476 | $op = new PHPUnit_Extensions_Database_Operation_Insert(); |
477 | $op->execute($this->_dbconn, | |
bbfd46a5 | 478 | $this->createFlatXMLDataSet( |
6a488035 TO |
479 | dirname(__FILE__) . '/activities_for_dashboard_count.xml' |
480 | ) | |
481 | ); | |
482 | ||
483 | $contactID = 9; | |
484 | $params = array( | |
485 | 'contact_id' => $contactID, | |
486 | 'admin' => FALSE, | |
487 | 'caseId' => NULL, | |
488 | 'context' => 'home', | |
489 | 'activity_type_id' => NULL, | |
490 | 'offset' => 0, | |
491 | 'rowCount' => 0, | |
492 | 'sort' => NULL, | |
493 | ); | |
6ab43e1b | 494 | $activitiesDep = CRM_Activity_BAO_Activity::deprecatedGetActivities($params); |
6a488035 | 495 | |
6ab43e1b | 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 | |
499 | $count = 2; | |
500 | $this->assertEquals($count, count($activities)); | |
6a488035 | 501 | |
6ab43e1b | 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.'); | |
6a488035 | 506 | |
6ab43e1b | 507 | if ($key == 3) { |
508 | $this->assertArrayHasKey($contactID, $value['target_contact_name']); | |
509 | } | |
510 | elseif ($key == 4) { | |
511 | $this->assertArrayHasKey($contactID, $value['assignee_contact_name']); | |
512 | } | |
6a488035 TO |
513 | } |
514 | } | |
515 | } | |
516 | ||
36d2f4d5 | 517 | /** |
518 | * Test target contact count. | |
519 | */ | |
520 | public function testTargetCountforContactSummary() { | |
521 | $targetCount = 5; | |
522 | $contactId = $this->individualCreate(); | |
cbcedb39 | 523 | $targetContactIDs = array(); |
36d2f4d5 | 524 | for ($i = 0; $i < $targetCount; $i++) { |
525 | $targetContactIDs[] = $this->individualCreate(array(), $i); | |
526 | } | |
cbcedb39 | 527 | // Create activities with 5 target contacts. |
36d2f4d5 | 528 | $activityParams = array( |
529 | 'source_contact_id' => $contactId, | |
530 | 'target_contact_id' => $targetContactIDs, | |
531 | ); | |
532 | $this->activityCreate($activityParams); | |
533 | ||
534 | $params = array( | |
535 | 'contact_id' => $contactId, | |
536 | 'context' => 'activity', | |
537 | ); | |
6ab43e1b | 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']); | |
542 | } | |
36d2f4d5 | 543 | |
36d2f4d5 | 544 | } |
545 | ||
6a488035 | 546 | /** |
eceb18cc | 547 | * Test getActivities BAO method. |
6a488035 | 548 | */ |
00be9182 | 549 | public function testGetActivitiesforContactSummary() { |
6a488035 TO |
550 | $op = new PHPUnit_Extensions_Database_Operation_Insert(); |
551 | $op->execute($this->_dbconn, | |
bbfd46a5 | 552 | $this->createFlatXMLDataSet( |
6a488035 TO |
553 | dirname(__FILE__) . '/activities_for_dashboard_count.xml' |
554 | ) | |
555 | ); | |
556 | ||
557 | $contactID = 9; | |
558 | $params = array( | |
559 | 'contact_id' => $contactID, | |
560 | 'admin' => FALSE, | |
561 | 'caseId' => NULL, | |
562 | 'context' => 'activity', | |
563 | 'activity_type_id' => NULL, | |
564 | 'offset' => 0, | |
565 | 'rowCount' => 0, | |
566 | 'sort' => NULL, | |
567 | ); | |
6ab43e1b | 568 | $activitiesDep = CRM_Activity_BAO_Activity::deprecatedGetActivities($params); |
6a488035 TO |
569 | |
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 | |
572 | $count = 5; | |
6ab43e1b | 573 | foreach (array($activitiesDep, CRM_Activity_BAO_Activity::getActivities($params)) as $activities) { |
6a488035 | 574 | |
6ab43e1b | 575 | $this->assertEquals($count, count($activities)); |
6a488035 | 576 | |
6ab43e1b | 577 | foreach ($activities as $key => $value) { |
578 | $this->assertEquals($value['subject'], "subject {$key}", 'Verify activity subject is correct.'); | |
6a488035 | 579 | |
6ab43e1b | 580 | if ($key > 8) { |
581 | $this->assertEquals($value['status_id'], 2, 'Verify all activities are scheduled.'); | |
582 | } | |
583 | else { | |
584 | $this->assertEquals($value['status_id'], 1, 'Verify all activities are scheduled.'); | |
585 | } | |
6a488035 | 586 | |
6ab43e1b | 587 | if ($key > 8) { |
588 | $this->assertEquals($value['activity_type_id'], 1, 'Verify activity type is correct.'); | |
589 | } | |
590 | else { | |
591 | $this->assertEquals($value['activity_type_id'], 2, 'Verify activity type is correct.'); | |
592 | } | |
593 | ||
594 | if ($key == 3) { | |
595 | $this->assertArrayHasKey($contactID, $value['target_contact_name']); | |
596 | } | |
597 | elseif ($key == 4) { | |
598 | $this->assertArrayHasKey($contactID, $value['assignee_contact_name']); | |
599 | } | |
6a488035 TO |
600 | } |
601 | } | |
602 | } | |
603 | ||
604 | /** | |
eceb18cc | 605 | * Test getActivities BAO method. |
6a488035 | 606 | */ |
5161bb0c | 607 | public function testGetActivitiesforContactSummaryWithActivities() { |
6a488035 TO |
608 | $op = new PHPUnit_Extensions_Database_Operation_Insert(); |
609 | $op->execute($this->_dbconn, | |
bbfd46a5 | 610 | $this->createFlatXMLDataSet( |
6a488035 TO |
611 | dirname(__FILE__) . '/activities_for_dashboard_count.xml' |
612 | ) | |
613 | ); | |
614 | ||
6ab43e1b | 615 | // parameters for different test cases, check each array key for the specific test-case |
5161bb0c | 616 | $testCases = array( |
617 | 'with-no-activity' => array( | |
618 | 'params' => array( | |
619 | 'contact_id' => 17, | |
620 | 'admin' => FALSE, | |
621 | 'caseId' => NULL, | |
622 | 'context' => 'home', | |
623 | 'activity_type_id' => NULL, | |
624 | 'offset' => 0, | |
625 | 'rowCount' => 0, | |
626 | 'sort' => NULL, | |
627 | ), | |
628 | ), | |
629 | 'with-activity' => array( | |
630 | 'params' => array( | |
631 | 'contact_id' => 1, | |
632 | 'admin' => FALSE, | |
633 | 'caseId' => NULL, | |
634 | 'context' => 'home', | |
635 | 'activity_type_id' => NULL, | |
636 | 'offset' => 0, | |
637 | 'rowCount' => 0, | |
638 | 'sort' => NULL, | |
639 | ), | |
640 | ), | |
641 | 'with-activity_type' => array( | |
642 | 'params' => array( | |
643 | 'contact_id' => 3, | |
644 | 'admin' => FALSE, | |
645 | 'caseId' => NULL, | |
646 | 'context' => 'home', | |
647 | 'activity_type_id' => 2, | |
648 | 'offset' => 0, | |
649 | 'rowCount' => 0, | |
650 | 'sort' => NULL, | |
651 | ), | |
652 | ), | |
653 | 'exclude-all-activity_type' => array( | |
654 | 'params' => array( | |
655 | 'contact_id' => 3, | |
656 | 'admin' => FALSE, | |
657 | 'caseId' => NULL, | |
658 | 'context' => 'home', | |
659 | 'activity_type_exclude_id' => array(1, 2), | |
660 | 'offset' => 0, | |
661 | 'rowCount' => 0, | |
662 | 'sort' => NULL, | |
663 | ), | |
664 | ), | |
665 | 'sort-by-subject' => array( | |
666 | 'params' => array( | |
667 | 'contact_id' => 1, | |
668 | 'admin' => FALSE, | |
669 | 'caseId' => NULL, | |
670 | 'context' => 'home', | |
671 | 'activity_type_id' => NULL, | |
672 | 'offset' => 0, | |
673 | 'rowCount' => 0, | |
674 | 'sort' => 'subject DESC', | |
675 | ), | |
676 | ), | |
677 | ); | |
678 | ||
679 | foreach ($testCases as $caseName => $testCase) { | |
6ab43e1b | 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']); | |
683 | ||
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); | |
689 | } | |
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'])); | |
698 | } | |
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'])); | |
710 | } | |
711 | if ($caseName == 'exclude-all-activity_type') { | |
712 | $this->assertEquals(0, count($activities)); | |
713 | $this->assertEquals(0, $activityCount); | |
714 | } | |
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( | |
720 | 'subject 8', | |
721 | 'subject 7', | |
722 | 'subject 1', | |
723 | ); | |
724 | $count = 0; | |
725 | foreach ($activities as $activity) { | |
726 | $this->assertEquals($subjectOrder[$count], $activity['subject']); | |
727 | $count++; | |
728 | } | |
5161bb0c | 729 | } |
730 | } | |
731 | } | |
6a488035 | 732 | } |
96025800 | 733 | |
49d4d222 | 734 | /** |
735 | * CRM-20793 : Test getActivities by using activity date and status filter | |
736 | */ | |
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' | |
742 | ) | |
743 | ); | |
744 | ||
745 | // activity IDs catagorised by date | |
746 | $lastWeekActivities = array(1, 2, 3); | |
747 | $todayActivities = array(4, 5, 6, 7); | |
a6d192c8 | 748 | $lastTwoMonthsActivities = array(8, 9, 10, 11); |
49d4d222 | 749 | $lastYearActivties = array(12, 13, 14, 15, 16); |
750 | ||
751 | // date values later used to set activity date value | |
752 | $lastWeekDate = date('YmdHis', strtotime('1 week ago')); | |
753 | $today = date('YmdHis'); | |
a6d192c8 | 754 | $lastTwoMonthAgoDate = date('YmdHis', strtotime('2 months ago')); |
49d4d222 | 755 | $lastYearDate = date('YmdHis', strtotime('1 year ago')); |
756 | for ($i = 1; $i <= 16; $i++) { | |
757 | if (in_array($i, $lastWeekActivities)) { | |
758 | $date = $lastWeekDate; | |
759 | } | |
a6d192c8 | 760 | elseif (in_array($i, $lastTwoMonthsActivities)) { |
761 | $date = $lastTwoMonthAgoDate; | |
49d4d222 | 762 | } |
763 | elseif (in_array($i, $lastYearActivties)) { | |
764 | $date = $lastYearDate; | |
765 | } | |
766 | elseif (in_array($i, $todayActivities)) { | |
767 | $date = $today; | |
768 | } | |
769 | $this->callAPISuccess('Activity', 'create', array( | |
770 | 'id' => $i, | |
771 | 'activity_date_time' => $date, | |
772 | )); | |
773 | } | |
774 | ||
775 | // parameters for different test cases, check each array key for the specific test-case | |
776 | $testCases = array( | |
777 | 'todays-activity' => array( | |
778 | 'params' => array( | |
779 | 'contact_id' => 1, | |
780 | 'admin' => TRUE, | |
781 | 'caseId' => NULL, | |
782 | 'context' => 'activity', | |
783 | 'activity_date_relative' => 'this.day', | |
784 | 'activity_type_id' => NULL, | |
785 | 'offset' => 0, | |
786 | 'rowCount' => 0, | |
787 | 'sort' => NULL, | |
788 | ), | |
789 | ), | |
790 | 'todays-activity-filtered-by-range' => array( | |
791 | 'params' => array( | |
792 | 'contact_id' => 1, | |
793 | 'admin' => TRUE, | |
794 | 'caseId' => NULL, | |
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, | |
799 | 'offset' => 0, | |
800 | 'rowCount' => 0, | |
801 | 'sort' => NULL, | |
802 | ), | |
803 | ), | |
804 | 'last-week-activity' => array( | |
805 | 'params' => array( | |
806 | 'contact_id' => 1, | |
807 | 'admin' => TRUE, | |
808 | 'caseId' => NULL, | |
809 | 'context' => 'activity', | |
810 | 'activity_date_relative' => 'previous.week', | |
811 | 'activity_type_id' => NULL, | |
812 | 'offset' => 0, | |
813 | 'rowCount' => 0, | |
814 | 'sort' => NULL, | |
815 | ), | |
816 | ), | |
a6d192c8 | 817 | 'this-quarter-activity' => array( |
49d4d222 | 818 | 'params' => array( |
819 | 'contact_id' => 1, | |
820 | 'admin' => TRUE, | |
821 | 'caseId' => NULL, | |
822 | 'context' => 'activity', | |
a6d192c8 | 823 | 'activity_date_relative' => 'this.quarter', |
49d4d222 | 824 | 'activity_type_id' => NULL, |
825 | 'offset' => 0, | |
826 | 'rowCount' => 0, | |
827 | 'sort' => NULL, | |
828 | ), | |
829 | ), | |
830 | 'last-year-activity' => array( | |
831 | 'params' => array( | |
832 | 'contact_id' => 1, | |
833 | 'admin' => TRUE, | |
834 | 'caseId' => NULL, | |
835 | 'context' => 'activity', | |
836 | 'activity_date_relative' => 'previous.year', | |
837 | 'activity_type_id' => NULL, | |
838 | 'offset' => 0, | |
839 | 'rowCount' => 0, | |
840 | 'sort' => NULL, | |
841 | ), | |
842 | ), | |
843 | 'activity-of-all-statuses' => array( | |
844 | 'params' => array( | |
845 | 'contact_id' => 1, | |
846 | 'admin' => TRUE, | |
847 | 'caseId' => NULL, | |
848 | 'context' => 'activity', | |
849 | 'activity_status_id' => '1,2', | |
850 | 'activity_type_id' => NULL, | |
851 | 'offset' => 0, | |
852 | 'rowCount' => 0, | |
853 | 'sort' => NULL, | |
854 | ), | |
855 | ), | |
856 | ); | |
857 | ||
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); | |
863 | ||
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); | |
868 | } | |
869 | elseif ($caseName == 'last-week-activity') { | |
870 | $this->assertEquals(count($lastWeekActivities), $activityCount); | |
871 | $this->assertEquals(count($lastWeekActivities), count($activitiesDep)); | |
872 | $this->checkArrayEquals($lastWeekActivities, $activityIDs); | |
873 | } | |
a6d192c8 | 874 | elseif ($caseName == 'lhis-quarter-activity') { |
875 | $this->assertEquals(count($lastTwoMonthsActivities), $activityCount); | |
876 | $this->assertEquals(count($lastTwoMonthsActivities), count($activitiesDep)); | |
877 | $this->checkArrayEquals($lastTwoMonthsActivities, $activityIDs); | |
49d4d222 | 878 | } |
879 | elseif ($caseName == 'last-year-activity') { | |
880 | $this->assertEquals(count($lastYearActivties), $activityCount); | |
881 | $this->assertEquals(count($lastYearActivties), count($activitiesDep)); | |
882 | $this->checkArrayEquals($lastYearActivties, $activityIDs); | |
883 | } | |
884 | elseif ($caseName == 'activity-of-all-statuses') { | |
885 | $this->assertEquals(16, $activityCount); | |
886 | $this->assertEquals(16, count($activitiesDep)); | |
887 | } | |
888 | } | |
889 | } | |
890 | ||
3cf1fae9 | 891 | /** |
892 | * CRM-20308: Test from email address when a 'copy of Activity' event occur | |
893 | */ | |
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', | |
902 | ); | |
903 | $sourceContactID = $this->individualCreate($sourceContactParams); | |
904 | $sourceDisplayName = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $sourceContactID, 'display_name'); | |
905 | ||
906 | // create an activity using API | |
907 | $params = array( | |
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'), | |
913 | ); | |
914 | $activity = $this->callAPISuccess('Activity', 'create', $params); | |
915 | ||
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); | |
3cf1fae9 | 920 | |
921 | // Case 2: System Default From Address | |
922 | // but first erase the email address of existing source contact ID | |
923 | $withoutEmailParams = array( | |
924 | 'email' => '', | |
925 | ); | |
926 | $sourceContactID = $this->individualCreate($withoutEmailParams); | |
927 | $params = array( | |
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'), | |
932 | ); | |
933 | $activity = $this->callAPISuccess('Activity', 'create', $params); | |
934 | // fetch domain info | |
935 | $domainInfo = $this->callAPISuccess('Domain', 'getsingle', array('id' => CRM_Core_Config::domainID())); | |
936 | ||
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']); | |
940 | } | |
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']); | |
944 | } | |
e88906fc | 945 | $this->assertEquals($expectedFromAddress, $formAddress); |
3cf1fae9 | 946 | |
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 | |
949 | } | |
950 | ||
75d842f8 | 951 | /** |
952 | * Set up for testing activity queries. | |
953 | */ | |
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' | |
959 | ) | |
960 | ); | |
961 | ||
962 | $this->_params = array( | |
963 | 'contact_id' => NULL, | |
964 | 'admin' => TRUE, | |
965 | 'caseId' => NULL, | |
966 | 'context' => 'home', | |
967 | 'activity_type_id' => NULL, | |
968 | 'offset' => 0, | |
969 | 'rowCount' => 0, | |
970 | 'sort' => NULL, | |
971 | ); | |
972 | } | |
973 | ||
824989b9 AS |
974 | public function testSendEmailBasic() { |
975 | $contactId = $this->individualCreate(); | |
976 | ||
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'); | |
981 | ||
982 | $contact = $this->civicrm_api('contact', 'getsingle', array('id' => $contactId, 'version' => $this->_apiversion)); | |
983 | $contactDetailsIntersectKeys = array( | |
984 | 'contact_id' => '', | |
985 | 'sort_name' => '', | |
986 | 'display_name' => '', | |
987 | 'do_not_email' => '', | |
988 | 'preferred_mail_format' => '', | |
989 | 'is_deceased' => '', | |
990 | 'email' => '', | |
991 | 'on_hold' => '', | |
992 | ); | |
993 | $contactDetails = array( | |
994 | array_intersect_key($contact, $contactDetailsIntersectKeys), | |
995 | ); | |
996 | ||
997 | $subject = __FUNCTION__ . ' subject'; | |
998 | $html = __FUNCTION__ . ' html'; | |
999 | $text = __FUNCTION__ . ' text'; | |
1000 | $userID = $loggedInUser; | |
1001 | ||
1002 | list($sent, $activity_id) = $email_result = CRM_Activity_BAO_Activity::sendEmail( | |
1003 | $contactDetails, | |
1004 | $subject, | |
1005 | $text, | |
1006 | $html, | |
1007 | $contact['email'], | |
1008 | $userID, | |
1009 | $from = __FUNCTION__ . '@example.com' | |
1010 | ); | |
1011 | ||
1012 | $activity = $this->civicrm_api('activity', 'getsingle', array('id' => $activity_id, 'version' => $this->_apiversion)); | |
1013 | $details = "-ALTERNATIVE ITEM 0- | |
1014 | $html | |
1015 | -ALTERNATIVE ITEM 1- | |
1016 | $text | |
1017 | -ALTERNATIVE END- | |
1018 | "; | |
1019 | $this->assertEquals($activity['details'], $details, 'Activity details does not match.'); | |
1020 | $this->assertEquals($activity['subject'], $subject, 'Activity subject does not match.'); | |
1021 | } | |
1022 | ||
1023 | public function testSendEmailWithCampaign() { | |
1024 | // Create a contact and contactDetails array. | |
1025 | $contactId = $this->individualCreate(); | |
1026 | ||
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'); | |
1031 | ||
1032 | $contact = $this->civicrm_api('contact', 'getsingle', array('id' => $contactId, 'version' => $this->_apiversion)); | |
1033 | $contactDetailsIntersectKeys = array( | |
1034 | 'contact_id' => '', | |
1035 | 'sort_name' => '', | |
1036 | 'display_name' => '', | |
1037 | 'do_not_email' => '', | |
1038 | 'preferred_mail_format' => '', | |
1039 | 'is_deceased' => '', | |
1040 | 'email' => '', | |
1041 | 'on_hold' => '', | |
1042 | ); | |
1043 | $contactDetails = array( | |
1044 | array_intersect_key($contact, $contactDetailsIntersectKeys), | |
1045 | ); | |
1046 | ||
1047 | // Create a campaign. | |
1048 | $result = $this->civicrm_api('Campaign', 'create', array( | |
1049 | 'version' => $this->_apiversion, | |
1050 | 'title' => __FUNCTION__ . ' campaign', | |
1051 | )); | |
1052 | $campaign_id = $result['id']; | |
1053 | ||
1054 | $subject = __FUNCTION__ . ' subject'; | |
1055 | $html = __FUNCTION__ . ' html'; | |
1056 | $text = __FUNCTION__ . ' text'; | |
1057 | $userID = $loggedInUser; | |
1058 | ||
1059 | list($sent, $activity_id) = $email_result = CRM_Activity_BAO_Activity::sendEmail( | |
1060 | $contactDetails, | |
1061 | $subject, | |
1062 | $text, | |
1063 | $html, | |
1064 | $contact['email'], | |
1065 | $userID, | |
1066 | $from = __FUNCTION__ . '@example.com', | |
1067 | $attachments = NULL, | |
1068 | $cc = NULL, | |
1069 | $bcc = NULL, | |
1070 | $contactIds = NULL, | |
1071 | $additionalDetails = NULL, | |
cb5d08cd | 1072 | NULL, |
824989b9 AS |
1073 | $campaign_id |
1074 | ); | |
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.'); | |
1077 | } | |
1078 | ||
6a488035 | 1079 | } |