4 * File for the TestActivity class
8 * @author Walt Haas <walt@dharmatech.org> (801) 534-1262
9 * @copyright Copyright CiviCRM LLC (C) 2009
10 * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html
11 * GNU Affero General Public License version 3
12 * @version $Id: ActivityTest.php 31254 2010-12-15 10:09:29Z eileen $
15 * This file is part of CiviCRM
17 * CiviCRM is free software; you can redistribute it and/or
18 * modify it under the terms of the GNU Affero General Public License
19 * as published by the Free Software Foundation; either version 3 of
20 * the License, or (at your option) any later version.
22 * CiviCRM is distributed in the hope that it will be useful,
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 * GNU Affero General Public License for more details.
27 * You should have received a copy of the GNU Affero General Public
28 * License along with this program. If not, see
29 * <http://www.gnu.org/licenses/>.
33 * Include class definitions
35 require_once 'CiviTest/CiviUnitTestCase.php';
39 * Test APIv3 civicrm_activity_* functions
41 * @package CiviCRM_APIv3
42 * @subpackage API_Activity
44 class api_v3_ActivityTest
extends CiviUnitTestCase
{
47 protected $_entity = 'activity';
48 protected $_apiversion = 3;
49 protected $test_activity_type_value;
50 protected $_contactID;
53 * Test setup for every test.
55 * Connect to the database, truncate the tables that will be used
56 * and redirect stdin to a temporary file
58 public function setUp() {
59 // Connect to the database
62 $this->_contactID
= $this->individualCreate();
63 //create activity types
64 $activityTypes = $this->callAPISuccess('option_value', 'create', array(
65 'option_group_id' => 2,
66 'name' => 'Test activity type',
67 'label' => 'Test activity type',
70 $this->test_activity_type_value
= $activityTypes['values'][0]['value'];
71 $this->test_activity_type_id
= $activityTypes['id'];
72 $this->_params
= array(
73 'source_contact_id' => $this->_contactID
,
74 'activity_type_id' => $this->test_activity_type_value
,
75 'subject' => 'test activity type id',
76 'activity_date_time' => '2011-06-02 14:36:13',
80 'location' => 'Pennsylvania',
81 'details' => 'a test activity',
83 $this->_params2
= array(
84 'source_contact_id' => $this->_contactID
,
85 'subject' => 'Eat & drink',
86 'activity_date_time' => date('Ymd'),
88 'location' => 'Napier',
89 'details' => 'discuss & eat',
91 'activity_type_id' => $this->test_activity_type_value
,
93 // create a logged in USER since the code references it for source_contact_id
94 $this->createLoggedInUser();
98 * Tears down the fixture, for example, closes a network connection.
100 * This method is called after a test is executed.
102 public function tearDown() {
103 $tablesToTruncate = array(
106 'civicrm_activity_contact',
108 $this->quickCleanup($tablesToTruncate, TRUE);
109 $this->callAPISuccess('option_value', 'delete', array('id' => $this->test_activity_type_id
));
113 * Check fails with empty array.
115 public function testActivityCreateEmpty() {
116 $this->callAPIFailure('activity', 'create', array());
120 * Check if required fields are not passed.
122 public function testActivityCreateWithoutRequired() {
124 'subject' => 'this case should fail',
125 'scheduled_date_time' => date('Ymd'),
127 $result = $this->callAPIFailure('activity', 'create', $params);
131 * Test civicrm_activity_create() with mismatched activity_type_id
134 public function testActivityCreateMismatchNameType() {
136 'source_contact_id' => $this->_contactID
,
137 'subject' => 'Test activity',
138 'activity_date_time' => date('Ymd'),
140 'location' => 'Pennsylvania',
141 'details' => 'a test activity',
143 'activity_name' => 'Fubar activity type',
144 'activity_type_id' => 5,
145 'scheduled_date_time' => date('Ymd'),
148 $result = $this->callAPIFailure('activity', 'create', $params);
152 * Test civicrm_activity_id() with missing source_contact_id is put with the current user.
154 public function testActivityCreateWithMissingContactId() {
156 'subject' => 'Make-it-Happen Meeting',
157 'activity_date_time' => date('Ymd'),
159 'location' => 'Pennsylvania',
160 'details' => 'a test activity',
162 'activity_name' => 'Test activity type',
165 $this->callAPISuccess('activity', 'create', $params);
169 * Test civicrm_activity_id() with non-numeric source_contact_id.
171 public function testActivityCreateWithNonNumericContactId() {
173 'source_contact_id' => 'fubar',
174 'subject' => 'Make-it-Happen Meeting',
175 'activity_date_time' => date('Ymd'),
177 'location' => 'Pennsylvania',
178 'details' => 'a test activity',
180 'activity_name' => 'Test activity type',
183 $this->callAPIFailure('activity', 'create', $params);
187 * Ensure that an invalid activity type causes failure.
189 * Oddly enough this test was failing because the creation of the invalid type
190 * got added to the set up routine. Probably a mis-fix on a test
192 public function testActivityCreateWithNonNumericActivityTypeId() {
194 'source_contact_id' => $this->_contactID
,
195 'subject' => 'Make-it-Happen Meeting',
196 'activity_date_time' => date('Ymd'),
198 'location' => 'Pennsylvania',
199 'details' => 'a test activity',
201 'activity_type_id' => 'Invalid Test activity type',
204 $result = $this->callAPIFailure('activity', 'create', $params);
208 * Check with incorrect required fields.
210 public function testActivityCreateWithUnknownActivityTypeId() {
212 'source_contact_id' => $this->_contactID
,
213 'subject' => 'Make-it-Happen Meeting',
214 'activity_date_time' => date('Ymd'),
216 'location' => 'Pennsylvania',
217 'details' => 'a test activity',
219 'activity_type_id' => 699,
222 $result = $this->callAPIFailure('activity', 'create', $params);
225 public function testActivityCreateWithInvalidPriority() {
227 'source_contact_id' => $this->_contactID
,
228 'subject' => 'Make-it-Happen Meeting',
229 'activity_date_time' => date('Ymd'),
231 'location' => 'Pennsylvania',
232 'details' => 'a test activity',
235 'activity_type_id' => 1,
238 $result = $this->callAPIFailure('activity', 'create', $params,
239 "'44' is not a valid option for field priority_id");
240 $this->assertEquals('priority_id', $result['error_field']);
245 * Test create succeeds with valid string for priority.
247 public function testActivityCreateWithValidStringPriority() {
249 'source_contact_id' => $this->_contactID
,
250 'subject' => 'Make-it-Happen Meeting',
251 'activity_date_time' => date('Ymd'),
253 'location' => 'Pennsylvania',
254 'details' => 'a test activity',
256 'priority_id' => 'Urgent',
257 'activity_type_id' => 1,
260 $result = $this->callAPISuccess('activity', 'create', $params);
261 $this->assertEquals(1, $result['values'][$result['id']]['priority_id']);
265 * Test create fails with invalid priority string.
267 public function testActivityCreateWithInValidStringPriority() {
269 'source_contact_id' => $this->_contactID
,
270 'subject' => 'Make-it-Happen Meeting',
271 'activity_date_time' => date('Ymd'),
273 'location' => 'Pennsylvania',
274 'details' => 'a test activity',
276 'priority_id' => 'ergUrgent',
277 'activity_type_id' => 1,
280 $this->callAPIFailure('activity', 'create', $params,
281 "'ergUrgent' is not a valid option for field priority_id");
285 * Test civicrm_activity_create() with valid parameters.
287 public function testActivityCreate() {
289 $this->callAPISuccess('activity', 'create', $this->_params
);
290 $result = $this->callAPISuccess('activity', 'get', $this->_params
);
291 $this->assertEquals($result['values'][$result['id']]['duration'], 120);
292 $this->assertEquals($result['values'][$result['id']]['subject'], 'test activity type id');
293 $this->assertEquals($result['values'][$result['id']]['activity_date_time'], '2011-06-02 14:36:13');
294 $this->assertEquals($result['values'][$result['id']]['location'], 'Pennsylvania');
295 $this->assertEquals($result['values'][$result['id']]['details'], 'a test activity');
296 $this->assertEquals($result['values'][$result['id']]['status_id'], 2);
297 $this->assertEquals($result['values'][$result['id']]['id'], $result['id']);
301 * Test civicrm_activity_create() with valid parameters - use type_id.
303 public function testActivityCreateCampaignTypeID() {
304 $this->enableCiviCampaign();
307 'source_contact_id' => $this->_contactID
,
308 'subject' => 'Make-it-Happen Meeting',
309 'activity_date_time' => '20110316',
311 'location' => 'Pennsylvania',
312 'details' => 'a test activity',
314 'activity_type_id' => 29,
318 $result = $this->callAPISuccess('activity', 'create', $params);
320 $result = $this->callAPISuccess('activity', 'get', array('id' => $result['id']));
321 $this->assertEquals($result['values'][$result['id']]['duration'], 120);
322 $this->assertEquals($result['values'][$result['id']]['subject'], 'Make-it-Happen Meeting');
323 $this->assertEquals($result['values'][$result['id']]['activity_date_time'], '2011-03-16 00:00:00');
324 $this->assertEquals($result['values'][$result['id']]['location'], 'Pennsylvania');
325 $this->assertEquals($result['values'][$result['id']]['details'], 'a test activity');
326 $this->assertEquals($result['values'][$result['id']]['status_id'], 1);
330 * Test get returns target and assignee contacts.
332 public function testActivityReturnTargetAssignee() {
334 $description = "Demonstrates setting & retrieving activity target & source.";
335 $subfile = "GetTargetandAssignee";
337 'source_contact_id' => $this->_contactID
,
338 'subject' => 'Make-it-Happen Meeting',
339 'activity_date_time' => '20110316',
341 'location' => 'Pennsylvania',
342 'details' => 'a test activity',
344 'activity_type_id' => 1,
346 'target_contact_id' => $this->_contactID
,
347 'assignee_contact_id' => $this->_contactID
,
350 $result = $this->callAPIAndDocument('activity', 'create', $params, __FUNCTION__
, __FILE__
, $description, $subfile);
351 $result = $this->callAPISuccess('activity', 'get', array(
352 'id' => $result['id'],
353 'version' => $this->_apiversion
,
354 'return.assignee_contact_id' => 1,
355 'return.target_contact_id' => 1,
358 $this->assertEquals($this->_contactID
, $result['values'][$result['id']]['assignee_contact_id'][0]);
359 $this->assertEquals($this->_contactID
, $result['values'][$result['id']]['target_contact_id'][0]);
363 * Test civicrm_activity_create() using example code.
365 public function testActivityCreateExample() {
366 require_once 'api/v3/examples/Activity/Create.php';
367 $result = activity_create_example();
368 $expectedResult = activity_create_expectedresult();
369 $this->assertEquals($result, $expectedResult);
373 * Test civicrm_activity_create() with valid parameters and custom data.
375 public function testActivityCreateCustom() {
376 $ids = $this->entityCustomGroupWithSingleFieldCreate(__FUNCTION__
, __FILE__
);
377 $params = $this->_params
;
378 $params['custom_' . $ids['custom_field_id']] = "custom string";
379 $result = $this->callAPIAndDocument($this->_entity
, 'create', $params, __FUNCTION__
, __FILE__
);
380 $result = $this->callAPISuccess($this->_entity
, 'get', array(
381 'return.custom_' . $ids['custom_field_id'] => 1,
382 'id' => $result['id'],
384 $this->assertEquals("custom string", $result['values'][$result['id']]['custom_' . $ids['custom_field_id']], ' in line ' . __LINE__
);
386 $this->customFieldDelete($ids['custom_field_id']);
387 $this->customGroupDelete($ids['custom_group_id']);
391 * Test civicrm_activity_create() with valid parameters and custom data.
393 public function testActivityCreateCustomContactRefField() {
395 $this->callAPISuccess('contact', 'create', array('id' => $this->_contactID
, 'sort_name' => 'Contact, Test'));
396 $subfile = 'ContactRefCustomField';
397 $description = "Demonstrates create with Contact Reference Custom Field.";
398 $ids = $this->entityCustomGroupWithSingleFieldCreate(__FUNCTION__
, __FILE__
);
400 'custom_group_id' => $ids['custom_group_id'],
401 'name' => 'Worker_Lookup',
402 'label' => 'Worker Lookup',
403 'html_type' => 'Autocomplete-Select',
404 'data_type' => 'ContactReference',
406 'is_searchable' => 1,
410 $customField = $this->callAPISuccess('custom_field', 'create', $params);
411 $params = $this->_params
;
412 $params['custom_' . $customField['id']] = "$this->_contactID";
414 $result = $this->callAPIAndDocument($this->_entity
, 'create', $params, __FUNCTION__
, __FILE__
, $description, $subfile);
415 $result = $this->callAPIAndDocument($this->_entity
, 'get', array(
416 'return.custom_' . $customField['id'] => 1,
417 'id' => $result['id'],
418 ), __FUNCTION__
, __FILE__
, 'Get with Contact Ref Custom Field', 'ContactRefCustomFieldGet');
420 $this->assertEquals('Anderson, Anthony', $result['values'][$result['id']]['custom_' . $customField['id']]);
421 $this->assertEquals($this->_contactID
, $result['values'][$result['id']]['custom_' . $customField['id'] . "_id"], ' in line ' . __LINE__
);
422 $this->assertEquals('Anderson, Anthony', $result['values'][$result['id']]['custom_' . $customField['id'] . '_1'], ' in line ' . __LINE__
);
423 $this->assertEquals($this->_contactID
, $result['values'][$result['id']]['custom_' . $customField['id'] . "_1_id"], ' in line ' . __LINE__
);
424 $this->customFieldDelete($ids['custom_field_id']);
425 $this->customGroupDelete($ids['custom_group_id']);
429 * Test civicrm_activity_create() with an invalid text status_id.
431 public function testActivityCreateBadTextStatus() {
434 'source_contact_id' => $this->_contactID
,
435 'subject' => 'Discussion on Apis for v3',
436 'activity_date_time' => date('Ymd'),
438 'location' => 'Pennsylvania',
439 'details' => 'a test activity',
440 'status_id' => 'Invalid',
441 'activity_name' => 'Test activity type',
444 $this->callAPIFailure('activity', 'create', $params);
448 * Test civicrm_activity_create() with an invalid text status_id.
450 public function testActivityCreateSupportActivityStatus() {
453 'source_contact_id' => $this->_contactID
,
454 'subject' => 'Discussion on Apis for v3',
455 'activity_date_time' => date('Ymd'),
457 'location' => 'Pennsylvania',
458 'details' => 'a test activity',
459 'activity_status_id' => 'Invalid',
460 'activity_name' => 'Test activity type',
463 $result = $this->callAPIFailure('activity', 'create', $params,
464 "'Invalid' is not a valid option for field status_id");
469 * Test civicrm_activity_create() with using a text status_id.
471 public function testActivityCreateTextStatus() {
474 'source_contact_id' => $this->_contactID
,
475 'subject' => 'Make-it-Happen Meeting',
476 'activity_date_time' => date('Ymd'),
478 'location' => 'Pennsylvania',
479 'details' => 'a test activity',
480 'status_id' => 'Scheduled',
481 'activity_name' => 'Test activity type',
484 $result = $this->callAPISuccess('activity', 'create', $params);
485 $this->assertEquals($result['values'][$result['id']]['duration'], 120);
486 $this->assertEquals($result['values'][$result['id']]['subject'], 'Make-it-Happen Meeting');
487 $this->assertEquals($result['values'][$result['id']]['activity_date_time'], date('Ymd') . '000000');
488 $this->assertEquals($result['values'][$result['id']]['location'], 'Pennsylvania');
489 $this->assertEquals($result['values'][$result['id']]['details'], 'a test activity');
493 * Test civicrm_activity_get() with no params
495 public function testActivityGetEmpty() {
496 $result = $this->callAPISuccess('activity', 'get', array());
500 * Test civicrm_activity_get() with a good activity ID
502 public function testActivityGetGoodID1() {
503 // Insert rows in civicrm_activity creating activities 4 and 13
504 $description = "Demonstrates getting assignee_contact_id & using it to get the contact.";
505 $subfile = 'ReturnAssigneeContact';
506 $activity = $this->callAPISuccess('activity', 'create', $this->_params
);
508 $contact = $this->callAPISuccess('Contact', 'Create', array(
509 'first_name' => "The Rock",
510 'last_name' => 'roccky',
511 'contact_type' => 'Individual',
513 'api.activity.create' => array(
514 'id' => $activity['id'],
515 'assignee_contact_id' => '$value.id',
520 'activity_id' => $activity['id'],
521 'version' => $this->_apiversion
,
523 'return.assignee_contact_id' => 1,
524 'api.contact.get' => array(
525 'id' => '$value.source_contact_id',
529 $result = $this->callAPIAndDocument('Activity', 'Get', $params, __FUNCTION__
, __FILE__
, $description, $subfile);
531 $this->assertEquals($activity['id'], $result['id'], 'In line ' . __LINE__
);
533 $this->assertEquals($contact['id'], $result['values'][0]['assignee_contact_id'][0], 'In line ' . __LINE__
);
535 $this->assertEquals($this->_contactID
, $result['values'][0]['api.contact.get']['values'][0]['contact_id'], 'In line ' . __LINE__
);
536 $this->assertEquals($this->test_activity_type_value
, $result['values'][0]['activity_type_id'], 'In line ' . __LINE__
);
537 $this->assertEquals("test activity type id", $result['values'][0]['subject'], 'In line ' . __LINE__
);
541 * test that get functioning does filtering.
543 public function testGetFilter() {
545 'source_contact_id' => $this->_contactID
,
546 'subject' => 'Make-it-Happen Meeting',
547 'activity_date_time' => '20110316',
549 'location' => 'Pennsylvania',
550 'details' => 'a test activity',
552 'activity_name' => 'Test activity type',
555 $result = $this->callAPISuccess('Activity', 'Create', $params);
556 $this->callAPISuccess('Activity', 'Get', array('subject' => 'Make-it-Happen Meeting'));
557 $this->assertEquals(1, $result['count']);
558 $this->assertEquals('Make-it-Happen Meeting', $result['values'][$result['id']]['subject']);
559 $this->callAPISuccess('Activity', 'Delete', array('id' => $result['id']));
564 * Test civicrm_activity_get() with filter target_contact_id
566 public function testActivityGetTargetFilter() {
567 $params = $this->_params
;
568 $contact1Params = array(
569 'first_name' => 'John',
570 'middle_name' => 'J.',
571 'last_name' => 'Anderson',
574 'email' => 'john_anderson@civicrm.org',
575 'contact_type' => 'Individual',
578 $contact1 = $this->individualCreate($contact1Params);
579 $contact2Params = array(
580 'first_name' => 'Michal',
581 'middle_name' => 'J.',
582 'last_name' => 'Anderson',
585 'email' => 'michal_anderson@civicrm.org',
586 'contact_type' => 'Individual',
589 $contact2 = $this->individualCreate($contact2Params);
591 $params['assignee_contact_id'] = array($contact1, $contact2);
592 $params['target_contact_id'] = array($contact2 => $contact2);
593 $activity = $this->callAPISuccess('Activity', 'Create', $params);
595 $activityget = $this->callAPISuccess('Activity', 'get', array(
596 'id' => $activity['id'],
597 'target_contact_id' => $contact2,
598 'return.target_contact_id' => 1,
600 $this->assertEquals($activity['id'], $activityget['id'], 'In line ' . __LINE__
);
601 $this->assertEquals($contact2, $activityget['values'][$activityget['id']]['target_contact_id'][0], 'In line ' . __LINE__
);
603 $activityget = $this->callAPISuccess('activity', 'get', array(
604 'target_contact_id' => $this->_contactID
,
605 'return.target_contact_id' => 1,
606 'id' => $activity['id'],
608 if ($activityget['count'] > 0) {
609 $this->assertNotEquals($contact2, $activityget['values'][$activityget['id']]['target_contact_id'][0], 'In line ' . __LINE__
);
614 * test that get functioning does filtering.
616 public function testGetStatusID() {
618 'source_contact_id' => $this->_contactID
,
619 'subject' => 'Make-it-Happen Meeting',
620 'activity_date_time' => '20110316',
622 'location' => 'Pennsylvania',
623 'details' => 'a test activity',
625 'activity_name' => 'Test activity type',
628 $this->callAPISuccess('Activity', 'Create', $params);
629 $result = $this->callAPISuccess('Activity', 'Get', array('activity_status_id' => '1'));
630 $this->assertEquals(1, $result['count'], 'one activity of status 1 should exist');
632 $result = $this->callAPISuccess('Activity', 'Get', array('status_id' => '1'));
633 $this->assertEquals(1, $result['count'], 'status_id should also work');
635 $result = $this->callAPISuccess('Activity', 'Get', array('activity_status_id' => '2'));
636 $this->assertEquals(0, $result['count'], 'No activities of status 1 should exist');
637 $result = $this->callAPISuccess('Activity', 'Get', array(
638 'version' => $this->_apiversion
,
641 $this->assertEquals(0, $result['count'], 'No activities of status 1 should exist');
646 * test that get functioning does filtering.
648 public function testGetFilterMaxDate() {
650 'source_contact_id' => $this->_contactID
,
651 'subject' => 'Make-it-Happen Meeting',
652 'activity_date_time' => '20110101',
654 'location' => 'Pennsylvania',
655 'details' => 'a test activity',
657 'activity_name' => 'Test activity type',
658 'version' => $this->_apiversion
,
661 $activityOne = $this->callAPISuccess('Activity', 'Create', $params);
662 $params['activity_date_time'] = 20120216;
663 $activityTwo = $this->callAPISuccess('Activity', 'Create', $params);
664 $result = $this->callAPISuccess('Activity', 'Get', array(
667 $description = "Demonstrates _low filter (at time of writing doesn't work if contact_id is set.";
668 $subfile = "DateTimeLow";
669 $this->assertEquals(2, $result['count']);
672 'filter.activity_date_time_low' => '20120101000000',
675 $result = $this->callAPIAndDocument('Activity', 'Get', $params, __FUNCTION__
, __FILE__
, $description, $subfile);
676 $this->assertEquals(1, $result['count']);
677 $description = "Demonstrates _high filter (at time of writing doesn't work if contact_id is set.";
678 $subfile = "DateTimeHigh";
679 $this->assertEquals('2012-02-16 00:00:00', $result['values'][0]['activity_date_time']);
681 'source_contact_id' => $this->_contactID
,
683 'filter.activity_date_time_high' => '20120101000000',
686 $result = $this->callAPIAndDocument('Activity', 'Get', $params, __FUNCTION__
, __FILE__
, $description, $subfile);
688 $this->assertEquals(1, $result['count']);
689 $this->assertEquals('2011-01-01 00:00:00', $result['values'][0]['activity_date_time']);
691 $this->callAPISuccess('Activity', 'Delete', array('version' => 3, 'id' => $activityOne['id']));
692 $this->callAPISuccess('Activity', 'Delete', array('version' => 3, 'id' => $activityTwo['id']));
696 * Test civicrm_activity_get() with a good activity ID which
697 * has associated custom data
699 public function testActivityGetGoodIDCustom() {
700 $ids = $this->entityCustomGroupWithSingleFieldCreate(__FUNCTION__
, __FILE__
);
702 $params = $this->_params
;
703 $params['custom_' . $ids['custom_field_id']] = "custom string";
705 $this->callAPISuccess($this->_entity
, 'create', $params);
707 // Retrieve the test value.
709 'activity_type_id' => $this->test_activity_type_value
,
711 'return.custom_' . $ids['custom_field_id'] => 1,
713 $result = $this->callAPIAndDocument('activity', 'get', $params, __FUNCTION__
, __FILE__
);
714 $this->assertEquals("custom string", $result['values'][0]['custom_' . $ids['custom_field_id']]);
716 $this->assertEquals($this->test_activity_type_value
, $result['values'][0]['activity_type_id']);
717 $this->assertEquals('test activity type id', $result['values'][0]['subject'], 'In line ' . __LINE__
);
718 $this->customFieldDelete($ids['custom_field_id']);
719 $this->customGroupDelete($ids['custom_group_id']);
723 * Test civicrm_activity_get() with a good activity ID which
724 * has associated custom data
726 public function testActivityGetContact_idCustom() {
727 $ids = $this->entityCustomGroupWithSingleFieldCreate(__FUNCTION__
, __FILE__
);
729 $params = $this->_params
;
730 $params['custom_' . $ids['custom_field_id']] = "custom string";
732 $result = $this->callAPISuccess($this->_entity
, 'create', $params);
733 // Retrieve the test value
735 'contact_id' => $this->_params
['source_contact_id'],
736 'activity_type_id' => $this->test_activity_type_value
,
738 'return.custom_' . $ids['custom_field_id'] => 1,
740 $result = $this->callAPIAndDocument('activity', 'get', $params, __FUNCTION__
, __FILE__
);
741 $this->assertEquals("custom string", $result['values'][0]['custom_' . $ids['custom_field_id']], ' in line ' . __LINE__
);
743 $this->assertEquals($this->test_activity_type_value
, $result['values'][0]['activity_type_id'], 'In line ' . __LINE__
);
744 $this->assertEquals('test activity type id', $result['values'][0]['subject'], 'In line ' . __LINE__
);
745 $this->assertEquals($result['values'][0]['id'], $result['id']);
749 * Check activity deletion with empty params.
751 public function testDeleteActivityForEmptyParams() {
752 $params = array('version' => $this->_apiversion
);
753 $this->callAPIFailure('activity', 'delete', $params);
757 * Check activity deletion without activity id.
759 public function testDeleteActivityWithoutId() {
761 'activity_name' => 'Meeting',
762 'version' => $this->_apiversion
,
764 $result = $this->callAPIFailure('activity', 'delete', $params);
768 * Check activity deletion without activity type.
770 public function testDeleteActivityWithoutActivityType() {
771 $params = array('id' => 1);
772 $result = $this->callAPIFailure('activity', 'delete', $params);
776 * Check activity deletion with incorrect data.
778 public function testDeleteActivityWithIncorrectActivityType() {
781 'activity_name' => 'Test Activity',
784 $result = $this->callAPIFailure('activity', 'delete', $params);
788 * Check activity deletion with correct data.
790 public function testDeleteActivity() {
791 $result = $this->callAPISuccess('activity', 'create', $this->_params
);
793 'id' => $result['id'],
794 'version' => $this->_apiversion
,
797 $this->callAPIAndDocument('activity', 'delete', $params, __FUNCTION__
, __FILE__
);
801 * Check if required fields are not passed.
803 public function testActivityUpdateWithoutRequired() {
805 'subject' => 'this case should fail',
806 'scheduled_date_time' => date('Ymd'),
809 $result = $this->callAPIFailure('activity', 'create', $params);
813 * Test civicrm_activity_update() with non-numeric id
815 public function testActivityUpdateWithNonNumericId() {
817 'id' => 'lets break it',
818 'activity_name' => 'Meeting',
819 'subject' => 'this case should fail',
820 'scheduled_date_time' => date('Ymd'),
823 $result = $this->callAPIFailure('activity', 'create', $params);
827 * Check with incorrect required fields.
829 public function testActivityUpdateWithIncorrectContactActivityType() {
832 'activity_name' => 'Test Activity',
833 'subject' => 'this case should fail',
834 'scheduled_date_time' => date('Ymd'),
835 'source_contact_id' => $this->_contactID
,
838 $result = $this->callAPIFailure('activity', 'create', $params,
839 'Invalid Activity Id');
843 * Test civicrm_activity_update() to update an existing activity
845 public function testActivityUpdate() {
846 $result = $this->callAPISuccess('activity', 'create', $this->_params
);
849 'id' => $result['id'],
850 'subject' => 'Make-it-Happen Meeting',
851 'activity_date_time' => '20091011123456',
853 'location' => '21, Park Avenue',
854 'details' => 'Lets update Meeting',
856 'source_contact_id' => $this->_contactID
,
860 $result = $this->callAPISuccess('activity', 'create', $params);
861 //hack on date comparison - really we should make getAndCheck smarter to handle dates
862 $params['activity_date_time'] = '2009-10-11 12:34:56';
863 // we also unset source_contact_id since it is stored in an aux table
864 unset($params['source_contact_id']);
865 $this->getAndCheck($params, $result['id'], 'activity');
869 * Test civicrm_activity_update() with valid parameters
870 * and some custom data
872 public function testActivityUpdateCustom() {
873 $ids = $this->entityCustomGroupWithSingleFieldCreate(__FUNCTION__
, __FILE__
);
875 $params = $this->_params
;
877 // Create an activity with custom data
878 //this has been updated from the previous 'old format' function - need to make it work
880 'source_contact_id' => $this->_contactID
,
881 'subject' => 'Make-it-Happen Meeting',
882 'activity_date_time' => '2009-10-18',
884 'location' => 'Pennsylvania',
885 'details' => 'a test activity to check the update api',
887 'activity_name' => 'Test activity type',
888 'version' => $this->_apiversion
,
889 'custom_' . $ids['custom_field_id'] => 'custom string',
891 $result = $this->callAPISuccess('activity', 'create', $params);
893 $activityId = $result['id'];
894 $result = $this->callAPISuccess($this->_entity
, 'get', array(
895 'return.custom_' . $ids['custom_field_id'] => 1,
897 'id' => $result['id'],
899 $this->assertEquals("custom string", $result['values'][$result['id']]['custom_' . $ids['custom_field_id']]);
900 $this->assertEquals("2009-10-18 00:00:00", $result['values'][$result['id']]['activity_date_time']);
901 $fields = $this->callAPISuccess('activity', 'getfields', array('version' => $this->_apiversion
));
902 $this->assertTrue(is_array($fields['values']['custom_' . $ids['custom_field_id']]));
904 // Update the activity with custom data.
907 'source_contact_id' => $this->_contactID
,
908 'subject' => 'Make-it-Happen Meeting',
910 'activity_name' => 'Test activity type',
911 // add this since dates are messed up
912 'activity_date_time' => date('Ymd'),
913 'custom_' . $ids['custom_field_id'] => 'Updated my test data',
914 'version' => $this->_apiversion
,
916 $result = $this->callAPISuccess('Activity', 'Create', $params);
918 $result = $this->callAPISuccess($this->_entity
, 'get', array(
919 'return.custom_' . $ids['custom_field_id'] => 1,
921 'id' => $result['id'],
923 $this->assertEquals("Updated my test data", $result['values'][$result['id']]['custom_' . $ids['custom_field_id']]);
927 * Test civicrm_activity_update() for core activity fields
928 * and some custom data
930 public function testActivityUpdateCheckCoreFields() {
931 $params = $this->_params
;
932 $contact1Params = array(
933 'first_name' => 'John',
934 'middle_name' => 'J.',
935 'last_name' => 'Anderson',
938 'email' => 'john_anderson@civicrm.org',
939 'contact_type' => 'Individual',
942 $contact1 = $this->individualCreate($contact1Params);
943 $contact2Params = array(
944 'first_name' => 'Michal',
945 'middle_name' => 'J.',
946 'last_name' => 'Anderson',
949 'email' => 'michal_anderson@civicrm.org',
950 'contact_type' => 'Individual',
953 $contact2 = $this->individualCreate($contact2Params);
955 $params['assignee_contact_id'] = array($contact1, $contact2);
956 $params['target_contact_id'] = array($contact2 => $contact2);
957 $result = $this->callAPISuccess('Activity', 'Create', $params);
959 $activityId = $result['id'];
961 'return.assignee_contact_id' => 1,
962 'return.target_contact_id' => 1,
963 'version' => $this->_apiversion
,
966 $result = $this->callAPISuccess($this->_entity
, 'get', $getParams);
967 $assignee = $result['values'][$result['id']]['assignee_contact_id'];
968 $target = $result['values'][$result['id']]['target_contact_id'];
969 $this->assertEquals(2, count($assignee), ' in line ' . __LINE__
);
970 $this->assertEquals(1, count($target), ' in line ' . __LINE__
);
971 $this->assertEquals(TRUE, in_array($contact1, $assignee), ' in line ' . __LINE__
);
972 $this->assertEquals(TRUE, in_array($contact2, $target), ' in line ' . __LINE__
);
974 $contact3Params = array(
975 'first_name' => 'Jijo',
976 'middle_name' => 'J.',
977 'last_name' => 'Anderson',
980 'email' => 'jijo_anderson@civicrm.org',
981 'contact_type' => 'Individual',
984 $contact4Params = array(
985 'first_name' => 'Grant',
986 'middle_name' => 'J.',
987 'last_name' => 'Anderson',
990 'email' => 'grant_anderson@civicrm.org',
991 'contact_type' => 'Individual',
994 $contact3 = $this->individualCreate($contact3Params);
995 $contact4 = $this->individualCreate($contact4Params);
998 $params['id'] = $activityId;
999 $params['assignee_contact_id'] = array($contact3 => $contact3);
1000 $params['target_contact_id'] = array($contact4 => $contact4);
1002 $result = $this->callAPISuccess('activity', 'create', $params);
1004 $this->assertEquals($activityId, $result['id'], ' in line ' . __LINE__
);
1006 $result = $this->callAPISuccess(
1010 'return.assignee_contact_id' => 1,
1011 'return.target_contact_id' => 1,
1012 'return.source_contact_id' => 1,
1013 'id' => $result['id'],
1017 $assignee = $result['values'][$result['id']]['assignee_contact_id'];
1018 $target = $result['values'][$result['id']]['target_contact_id'];
1020 $this->assertEquals(1, count($assignee), ' in line ' . __LINE__
);
1021 $this->assertEquals(1, count($target), ' in line ' . __LINE__
);
1022 $this->assertEquals(TRUE, in_array($contact3, $assignee), ' in line ' . __LINE__
);
1023 $this->assertEquals(TRUE, in_array($contact4, $target), ' in line ' . __LINE__
);
1025 foreach ($this->_params
as $fld => $val) {
1026 $this->assertEquals($val, $result['values'][$result['id']][$fld]);
1031 * Test civicrm_activity_update() where the DB has a date_time
1032 * value and there is none in the update params.
1034 public function testActivityUpdateNotDate() {
1035 $result = $this->callAPISuccess('activity', 'create', $this->_params
);
1038 'id' => $result['id'],
1039 'subject' => 'Make-it-Happen Meeting',
1041 'location' => '21, Park Avenue',
1042 'details' => 'Lets update Meeting',
1044 'source_contact_id' => $this->_contactID
,
1048 $result = $this->callAPISuccess('activity', 'create', $params);
1049 //hack on date comparison - really we should make getAndCheck smarter to handle dates
1050 $params['activity_date_time'] = $this->_params
['activity_date_time'];
1051 // we also unset source_contact_id since it is stored in an aux table
1052 unset($params['source_contact_id']);
1053 $this->getAndCheck($params, $result['id'], 'activity');
1057 * Check activity update with status.
1059 public function testActivityUpdateWithStatus() {
1060 $activity = $this->callAPISuccess('activity', 'create', $this->_params
);
1062 'id' => $activity['id'],
1063 'source_contact_id' => $this->_contactID
,
1064 'subject' => 'Hurry update works',
1066 'activity_name' => 'Test activity type',
1069 $result = $this->callAPISuccess('activity', 'create', $params);
1070 $this->assertEquals($result['id'], $activity['id']);
1071 $this->assertEquals($result['values'][$activity['id']]['subject'], 'Hurry update works');
1072 $this->assertEquals($result['values'][$activity['id']]['status_id'], 1
1077 * Test civicrm_activity_update() where the source_contact_id
1078 * is not in the update params.
1080 public function testActivityUpdateKeepSource() {
1081 $activity = $this->callAPISuccess('activity', 'create', $this->_params
);
1082 // Updating the activity but not providing anything for the source contact
1083 // (It was set as $this->_contactID earlier.)
1085 'id' => $activity['id'],
1086 'subject' => 'Updated Make-it-Happen Meeting',
1088 'location' => '21, Park Avenue',
1089 'details' => 'Lets update Meeting',
1091 'activity_name' => 'Test activity type',
1095 $result = $this->callAPISuccess('activity', 'create', $params);
1096 $findactivity = $this->callAPISuccess('Activity', 'Get', array('id' => $activity['id']));
1100 * Test civicrm_activities_contact_get()
1102 public function testActivitiesContactGet() {
1103 $activity = $this->callAPISuccess('activity', 'create', $this->_params
);
1104 $activity2 = $this->callAPISuccess('activity', 'create', $this->_params2
);
1105 // Get activities associated with contact $this->_contactID.
1107 'contact_id' => $this->_contactID
,
1109 $result = $this->callAPISuccess('activity', 'get', $params);
1111 $this->assertEquals(2, $result['count'], 'In line ' . __LINE__
);
1112 $this->assertEquals($this->test_activity_type_value
, $result['values'][$activity['id']]['activity_type_id']);
1113 $this->assertEquals('Test activity type', $result['values'][$activity['id']]['activity_name']);
1114 $this->assertEquals('Test activity type', $result['values'][$activity2['id']]['activity_name']);
1118 * Test chained Activity format.
1120 public function testChainedActivityGet() {
1122 $activity = $this->callAPISuccess('Contact', 'Create', array(
1123 'display_name' => "bob brown",
1124 'contact_type' => 'Individual',
1125 'api.activity_type.create' => array(
1127 'label' => 'send out letters',
1133 'api.activity.create' => array(
1134 'subject' => 'send letter',
1135 'activity_type_id' => '$value.api.activity_type.create.values.0.value',
1139 $result = $this->callAPISuccess('Activity', 'Get', array(
1140 'id' => $activity['id'],
1141 'return.assignee_contact_id' => 1,
1142 'api.contact.get' => array('api.pledge.get' => 1),
1147 * Test civicrm_activity_contact_get() with invalid Contact ID.
1149 public function testActivitiesContactGetWithInvalidContactId() {
1150 $params = array('contact_id' => 'contact');
1151 $this->callAPIFailure('activity', 'get', $params);
1155 * Test civicrm_activity_contact_get() with contact having no Activity.
1157 public function testActivitiesContactGetHavingNoActivity() {
1159 'first_name' => 'dan',
1160 'last_name' => 'conberg',
1161 'email' => 'dan.conberg@w.co.in',
1162 'contact_type' => 'Individual',
1165 $contact = $this->callAPISuccess('contact', 'create', $params);
1167 'contact_id' => $contact['id'],
1169 $result = $this->callAPISuccess('activity', 'get', $params);
1170 $this->assertEquals($result['count'], 0);
1174 * Test getfields function.
1176 public function testGetFields() {
1177 $params = array('action' => 'create');
1178 $result = $this->callAPIAndDocument('activity', 'getfields', $params, __FUNCTION__
, __FILE__
, NULL, NULL);
1179 $this->assertTrue(is_array($result['values']), 'get fields doesn\'t return values array');
1180 foreach ($result['values'] as $key => $value) {
1181 $this->assertTrue(is_array($value), $key . " is not an array");