4 +--------------------------------------------------------------------+
5 | CiviCRM version 4.5 |
6 +--------------------------------------------------------------------+
7 | Copyright CiviCRM LLC (c) 2004-2014 |
8 +--------------------------------------------------------------------+
9 | This file is a part of CiviCRM. |
11 | CiviCRM is free software; you can copy, modify, and distribute it |
12 | under the terms of the GNU Affero General Public License |
13 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
15 | CiviCRM is distributed in the hope that it will be useful, but |
16 | WITHOUT ANY WARRANTY; without even the implied warranty of |
17 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
18 | See the GNU Affero General Public License for more details. |
20 | You should have received a copy of the GNU Affero General Public |
21 | License and the CiviCRM Licensing Exception along |
22 | with this program; if not, contact CiviCRM LLC |
23 | at info[AT]civicrm[DOT]org. If you have questions about the |
24 | GNU Affero General Public License or the licensing of CiviCRM, |
25 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
26 +--------------------------------------------------------------------+
30 * Include class definitions
32 require_once 'tests/phpunit/CiviTest/CiviUnitTestCase.php';
35 * Test APIv3 civicrm_profile_* functions
39 class api_v3_ProfileTest
extends CiviUnitTestCase
{
40 protected $_apiversion;
41 protected $_profileID = 0;
42 protected $_membershipTypeID;
43 protected $_contactID;
50 'name' => 'Profile Test',
51 'description' => 'Test all profile API methods.',
52 'group' => 'CiviCRM API Tests',
57 $this->_apiversion
= 3;
59 $config = CRM_Core_Config
::singleton();
60 $config->countryLimit
[1] = 1013;
61 $config->stateLimit
[1] = 1013;
62 $this->createLoggedInUser();
63 $this->_membershipTypeID
= $this->membershipTypeCreate();
68 $this->quickCleanup(array(
73 'civicrm_contribution',
75 $this->callAPISuccess('membership_type', 'delete', array('id' => $this->_membershipTypeID
));
76 // ok can't be bothered wring an api to do this & truncating is crazy
77 CRM_Core_DAO
::executeQuery(" DELETE FROM civicrm_uf_group WHERE id IN ($this->_profileID, 26)");
80 ////////////// test $this->callAPISuccess3_profile_get //////////////////
83 * check Without ProfileId
85 function testProfileGetWithoutProfileId() {
89 $result = $this->callAPIFailure('profile', 'get', $params,
90 'Mandatory key(s) missing from params array: profile_id'
95 * check with no invalid profile Id
97 function testProfileGetInvalidProfileId() {
100 'profile_id' => 1000,
102 $result = $this->callAPIFailure('profile', 'get', $params);
108 function testProfileGet() {
109 $pofileFieldValues = $this->_createIndividualContact();
110 $expected = current($pofileFieldValues);
111 $contactId = key($pofileFieldValues);
113 'profile_id' => $this->_profileID
,
114 'contact_id' => $contactId,
116 $result = $this->callAPISuccess('profile', 'get', $params);
117 foreach ($expected as $profileField => $value) {
118 $this->assertEquals($value, CRM_Utils_Array
::value($profileField, $result['values']));
122 function testProfileGetMultiple() {
123 $pofileFieldValues = $this->_createIndividualContact();
124 $expected = current($pofileFieldValues);
125 $contactId = key($pofileFieldValues);
127 'profile_id' => array($this->_profileID
, 1, 'Billing'),
128 'contact_id' => $contactId,
131 $result = $this->callAPIAndDocument('profile', 'get', $params, __FUNCTION__
, __FILE__
);
132 foreach ($expected as $profileField => $value) {
133 $this->assertEquals($value, CRM_Utils_Array
::value($profileField, $result['values'][$this->_profileID
]), " error message: " . "missing/mismatching value for {$profileField}");
135 $this->assertEquals('abc1', $result['values'][1]['first_name'], " error message: " . "missing/mismatching value for {$profileField}");
136 $this->assertFalse(array_key_exists('email-Primary', $result['values'][1]), 'profile 1 doesn not include email');
137 $this->assertEquals($result['values']['Billing'], array(
138 'billing_first_name' => 'abc1',
139 'billing_middle_name' => 'J.',
140 'billing_last_name' => 'xyz1',
141 'billing_street_address-5' => '5 Saint Helier St',
142 'billing_city-5' => 'Gotham City',
143 'billing_state_province_id-5' => '1021',
144 'billing_country_id-5' => '1228',
145 'billing_postal_code-5' => '90210',
146 'billing-email-5' => 'abc1.xyz1@yahoo.com',
147 'email-5' => 'abc1.xyz1@yahoo.com',
151 function testProfileGetBillingUseIsBillingLocation() {
152 $individual = $this->_createIndividualContact();
153 $contactId = key($individual);
154 $this->callAPISuccess('address', 'create', array(
156 'street_address' => 'is billing st',
157 'location_type_id' => 2,
158 'contact_id' => $contactId,
161 $expected = current($individual);
164 'profile_id' => array($this->_profileID
, 1, 'Billing'),
165 'contact_id' => $contactId,
168 $result = $this->callAPISuccess('profile', 'get', $params);
169 $this->assertEquals('abc1', $result['values'][1]['first_name']);
170 $this->assertEquals(array(
171 'billing_first_name' => 'abc1',
172 'billing_middle_name' => 'J.',
173 'billing_last_name' => 'xyz1',
174 'billing_street_address-5' => 'is billing st',
175 'billing_city-5' => '',
176 'billing_state_province_id-5' => '',
177 'billing_country_id-5' => '',
178 'billing-email-5' => 'abc1.xyz1@yahoo.com',
179 'email-5' => 'abc1.xyz1@yahoo.com',
180 'billing_postal_code-5' => '',
181 ), $result['values']['Billing']);
184 function testProfileGetMultipleHasBillingLocation() {
185 $individual = $this->_createIndividualContact();
186 $contactId = key($individual);
187 $this->callAPISuccess('address', 'create', array('contact_id' => $contactId , 'street_address' => '25 Big Street', 'city' => 'big city', 'location_type_id' => 5));
188 $this->callAPISuccess('email', 'create', array('contact_id' => $contactId , 'email' => 'big@once.com', 'location_type_id' => 2, 'is_billing' => 1));
190 $expected = current($individual);
193 'profile_id' => array($this->_profileID
, 1, 'Billing'),
194 'contact_id' => $contactId,
197 $result = $this->callAPISuccess('profile', 'get', $params, __FUNCTION__
, __FILE__
);
198 $this->assertEquals('abc1', $result['values'][1]['first_name']);
199 $this->assertEquals($result['values']['Billing'], array(
200 'billing_first_name' => 'abc1',
201 'billing_middle_name' => 'J.',
202 'billing_last_name' => 'xyz1',
203 'billing_street_address-5' => '25 Big Street',
204 'billing_city-5' => 'big city',
205 'billing_state_province_id-5' => '',
206 'billing_country_id-5' => '',
207 'billing-email-5' => 'big@once.com',
208 'email-5' => 'big@once.com',
209 'billing_postal_code-5' => '',
214 * get Billing empty contact - this will return generic defaults
216 function testProfileGetBillingEmptyContact() {
219 'profile_id' => array('Billing'),
222 $result = $this->callAPISuccess('profile', 'get', $params);
223 $this->assertEquals(array(
224 'billing_first_name' => '',
225 'billing_middle_name' => '',
226 'billing_last_name' => '',
227 'billing_street_address-5' => '',
228 'billing_city-5' => '',
229 'billing_state_province_id-5' => '',
230 'billing_country_id-5' => '1228',
231 'billing_email-5' => '',
233 'billing_postal_code-5' => '',
234 ), $result['values']['Billing']);
238 * check contact activity profile without activity id
240 function testContactActivityGetWithoutActivityId() {
241 list($params, $expected) = $this->_createContactWithActivity();
243 unset($params['activity_id']);
244 $result = $this->callAPIFailure('profile', 'get', $params,
245 'Mandatory key(s) missing from params array: activity_id');
249 * check contact activity profile wrong activity id
251 function testContactActivityGetWrongActivityId() {
252 list($params, $expected) = $this->_createContactWithActivity();
254 $params['activity_id'] = 100001;
255 $result = $this->callAPIFailure('profile', 'get', $params,
256 'Invalid Activity Id (aid).');
260 * check contact activity profile with wrong activity type
262 function testContactActivityGetWrongActivityType() {
263 //flush cache by calling with reset
264 $activityTypes = CRM_Core_PseudoConstant
::activityType(TRUE, TRUE, TRUE, 'name', TRUE);
266 $sourceContactId = $this->householdCreate();
268 $activityparams = array(
269 'source_contact_id' => $sourceContactId,
270 'activity_type_id' => '2',
271 'subject' => 'Test activity',
272 'activity_date_time' => '20110316',
274 'location' => 'Pensulvania',
275 'details' => 'a test activity',
277 'priority_id' => '1',
280 $activity = $this->callAPISuccess('activity', 'create', $activityparams);
282 $activityValues = array_pop($activity['values']);
284 list($params, $expected) = $this->_createContactWithActivity();
286 $params['activity_id'] = $activityValues['id'];
287 $result = $this->callAPIFailure('profile', 'get', $params,
288 'This activity cannot be edited or viewed via this profile.'
293 * check contact activity profile with success
295 function testContactActivityGetSuccess() {
296 list($params, $expected) = $this->_createContactWithActivity();
298 $result = $this->callAPISuccess('profile', 'get', $params);
300 foreach ($expected as $profileField => $value) {
301 $this->assertEquals($value, CRM_Utils_Array
::value($profileField, $result['values']), "In line " . __LINE__
. " error message: " . "missing/mismatching value for {$profileField}"
307 * Check getfields works & gives us our fields
309 function testGetFields() {
310 $this->_createIndividualProfile();
311 $this->_addCustomFieldToProfile($this->_profileID
);
312 $result = $this->callAPIAndDocument('profile', 'getfields', array('action' => 'submit', 'profile_id' => $this->_profileID
), __FUNCTION__
, __FILE__
,
313 'demonstrates retrieving profile fields passing in an id');
314 $this->assertArrayKeyExists('first_name', $result['values']);
315 $this->assertEquals('2', $result['values']['first_name']['type']);
316 $this->assertEquals('Email', $result['values']['email-primary']['title']);
317 $this->assertEquals('civicrm_state_province', $result['values']['state_province-1']['pseudoconstant']['table']);
318 $this->assertEquals('defaultValue', $result['values']['custom_1']['default_value']);
319 $this->assertFalse(array_key_exists('participant_status', $result['values']));
322 * Check getfields works & gives us our fields - partipant profile
324 function testGetFieldsParticipantProfile() {
325 $result = $this->callAPISuccess('profile', 'getfields', array(
326 'action' => 'submit',
327 'profile_id' => 'participant_status',
328 'get_options' => 'all')
330 $this->assertTrue(array_key_exists('participant_status_id', $result['values']));
331 $this->assertEquals('Attended', $result['values']['participant_status_id']['options'][2]);
332 $this->assertEquals(array('participant_status'), $result['values']['participant_status_id']['api.aliases']);
336 * Check getfields works & gives us our fields - membership_batch_entry
337 * (getting to the end with no e-notices is pretty good evidence it's working)
339 function testGetFieldsMembershipBatchProfile() {
340 $result = $this->callAPISuccess('profile', 'getfields', array(
341 'action' => 'submit',
342 'profile_id' => 'membership_batch_entry',
343 'get_options' => 'all')
345 $this->assertTrue(array_key_exists('total_amount', $result['values']));
346 $this->assertTrue(array_key_exists('financial_type_id', $result['values']));
347 $this->assertEquals(array('contribution_type_id', 'contribution_type', 'financial_type'), $result['values']['financial_type_id']['api.aliases']);
348 $this->assertTrue(!array_key_exists('financial_type', $result['values']));
349 $this->assertEquals(12, $result['values']['receive_date']['type']);
353 * Check getfields works & gives us our fields - do them all
354 * (getting to the end with no e-notices is pretty good evidence it's working)
356 function testGetFieldsAllProfiles() {
357 $result = $this->callAPISuccess('uf_group', 'get', array('return' => 'id'));
358 $profileIDs = array_keys($result['values']);
359 foreach ($profileIDs as $profileID) {
360 $result = $this->callAPISuccess('profile', 'getfields', array(
361 'action' => 'submit',
362 'profile_id' => $profileID,
363 'get_options' => 'all')
367 /////////////// test $this->callAPISuccess3_profile_set //////////////////
370 * check Without ProfileId
372 function testProfileSubmitWithoutProfileId() {
376 $result = $this->callAPIFailure('profile', 'submit', $params,
377 'Mandatory key(s) missing from params array: profile_id'
382 * check with no invalid profile Id
384 function testProfileSubmitInvalidProfileId() {
387 'profile_id' => 1000,
389 $result = $this->callAPIFailure('profile', 'submit', $params);
393 * check with missing required field in profile
395 function testProfileSubmitCheckProfileRequired() {
396 $pofileFieldValues = $this->_createIndividualContact();
397 current($pofileFieldValues);
398 $contactId = key($pofileFieldValues);
399 $updateParams = array(
400 'first_name' => 'abc2',
401 'last_name' => 'xyz2',
402 'phone-1-1' => '022 321 826',
403 'country-1' => '1013',
404 'state_province-1' => '1000',
407 $params = array_merge(array('profile_id' => $this->_profileID
, 'contact_id' => $contactId),
411 $result = $this->callAPIFailure('profile', 'submit', $params,
412 "Missing required parameters for profile id $this->_profileID: email-Primary"
419 function testProfileSubmit() {
420 $pofileFieldValues = $this->_createIndividualContact();
421 current($pofileFieldValues);
422 $contactId = key($pofileFieldValues);
424 $updateParams = array(
425 'first_name' => 'abc2',
426 'last_name' => 'xyz2',
427 'email-primary' => 'abc2.xyz2@gmail.com',
428 'phone-1-1' => '022 321 826',
429 'country-1' => '1013',
430 'state_province-1' => '1000',
433 $params = array_merge(array(
434 'profile_id' => $this->_profileID
,
435 'contact_id' => $contactId,
438 $result = $this->callAPIAndDocument('profile', 'submit', $params, __FUNCTION__
, __FILE__
);
441 'profile_id' => $this->_profileID
,
442 'contact_id' => $contactId,
444 $profileDetails = $this->callAPISuccess('profile', 'get', $getParams);
446 foreach ($updateParams as $profileField => $value) {
447 $this->assertEquals($value, CRM_Utils_Array
::value($profileField, $profileDetails['values']), "missing/mismatching value for {$profileField}"
450 unset($params['email-primary']);
451 $params['email-Primary'] = 'my@mail.com';
452 $this->callAPISuccess('profile', 'submit', $params);
453 $profileDetails = $this->callAPISuccess('profile', 'get', $getParams);
454 $this->assertEquals('my@mail.com', $profileDetails['values']['email-Primary']);
458 * Ensure caches are being cleared so we don't get into a debugging trap because of cached metadata
459 * First we delete & create to increment the version & then check for caching probs
461 function testProfileSubmitCheckCaching() {
462 $this->callAPISuccess('membership_type', 'delete', array('id' => $this->_membershipTypeID
));
463 $this->_membershipTypeID
= $this->membershipTypeCreate();
465 $membershipTypes = $this->callAPISuccess('membership_type', 'get', array());
466 $profileFields = $this->callAPISuccess('profile', 'getfields', array('get_options' => 'all', 'action' => 'submit', 'profile_id' => 'membership_batch_entry'));
467 $getoptions = $this->callAPISuccess('membership', 'getoptions', array('field' => 'membership_type', 'context' => 'validate'));
468 $this->assertEquals(array_keys($membershipTypes['values']), array_keys($getoptions['values']));
469 $this->assertEquals(array_keys($membershipTypes['values']), array_keys($profileFields['values']['membership_type_id']['options']));
474 * Test that the fields are returned in the right order despite the faffing around that goes on
476 function testMembershipGetFieldsOrder() {
477 $result = $this->callAPISuccess('profile', 'getfields', array('action' => 'submit', 'profile_id' => 'membership_batch_entry'));
479 foreach($result['values'] as $fieldName => $field) {
480 if($fieldName == 'profile_id') {
483 $this->assertEquals($field['weight'], $weight);
488 * Check we can submit membership batch profiles (create mode)
490 function testProfileSubmitMembershipBatch() {
491 $this->_contactID
= $this->individualCreate();
492 $this->callAPISuccess('profile', 'submit', array(
493 'profile_id' => 'membership_batch_entry',
494 'financial_type_id' => 1,
495 'membership_type' => $this->_membershipTypeID
,
496 'join_date' => 'now',
497 'total_amount' => 10,
498 'contribution_status_id' => 1,
499 'receive_date' => 'now',
500 'contact_id' => $this->_contactID
,
504 * set is deprecated but we need to ensure it still works
506 function testLegacySet() {
507 $pofileFieldValues = $this->_createIndividualContact();
508 current($pofileFieldValues);
509 $contactId = key($pofileFieldValues);
511 $updateParams = array(
512 'first_name' => 'abc2',
513 'last_name' => 'xyz2',
514 'email-Primary' => 'abc2.xyz2@gmail.com',
515 'phone-1-1' => '022 321 826',
516 'country-1' => '1013',
517 'state_province-1' => '1000',
520 $params = array_merge(array(
521 'profile_id' => $this->_profileID
,
522 'contact_id' => $contactId,
525 $result = $this->callAPISuccess('profile', 'set', $params);
526 $this->assertArrayKeyExists('values', $result);
528 'profile_id' => $this->_profileID
,
529 'contact_id' => $contactId,
531 $profileDetails = $this->callAPISuccess('profile', 'get', $getParams);
533 foreach ($updateParams as $profileField => $value) {
534 $this->assertEquals($value, CRM_Utils_Array
::value($profileField, $profileDetails['values']), "In line " . __LINE__
. " error message: " . "missing/mismatching value for {$profileField}"
539 * check contact activity profile without activity id
541 function testContactActivitySubmitWithoutActivityId() {
542 list($params, $expected) = $this->_createContactWithActivity();
544 $params = array_merge($params, $expected);
545 unset($params['activity_id']);
546 $result = $this->callAPIFailure('profile', 'submit', $params);
547 $this->assertEquals($result['error_message'], 'Mandatory key(s) missing from params array: activity_id');
551 * check contact activity profile wrong activity id
553 function testContactActivitySubmitWrongActivityId() {
554 list($params, $expected) = $this->_createContactWithActivity();
555 $params = array_merge($params, $expected);
556 $params['activity_id'] = 100001;
557 $result = $this->callAPIFailure('profile', 'submit', $params);
558 $this->assertEquals($result['error_message'], 'Invalid Activity Id (aid).');
562 * check contact activity profile with wrong activity type
564 function testContactActivitySubmitWrongActivityType() {
565 //flush cache by calling with reset
566 $activityTypes = CRM_Core_PseudoConstant
::activityType(TRUE, TRUE, TRUE, 'name', TRUE);
568 $sourceContactId = $this->householdCreate();
570 $activityparams = array(
571 'source_contact_id' => $sourceContactId,
572 'activity_type_id' => '2',
573 'subject' => 'Test activity',
574 'activity_date_time' => '20110316',
576 'location' => 'Pensulvania',
577 'details' => 'a test activity',
579 'priority_id' => '1',
582 $activity = $this->callAPISuccess('activity', 'create', $activityparams);
584 $activityValues = array_pop($activity['values']);
586 list($params, $expected) = $this->_createContactWithActivity();
588 $params = array_merge($params, $expected);
589 $params['activity_id'] = $activityValues['id'];
590 $result = $this->callAPIFailure('profile', 'submit', $params,
591 'This activity cannot be edited or viewed via this profile.');
595 * check contact activity profile with success
597 function testContactActivitySubmitSuccess() {
598 list($params, $expected) = $this->_createContactWithActivity();
600 $updateParams = array(
601 'first_name' => 'abc2',
602 'last_name' => 'xyz2',
603 'email-Primary' => 'abc2.xyz2@yahoo.com',
604 'activity_subject' => 'Test Meeting',
605 'activity_details' => 'a test activity details',
606 'activity_duration' => '100',
607 'activity_date_time' => '03/08/2010',
608 'activity_status_id' => '2',
610 $profileParams = array_merge($params, $updateParams);
611 $this->callAPISuccess('profile', 'submit', $profileParams);
612 $result = $this->callAPISuccess('profile', 'get', $params);
614 foreach ($updateParams as $profileField => $value) {
615 $this->assertEquals($value, CRM_Utils_Array
::value($profileField, $result['values']), "In line " . __LINE__
. " error message: " . "missing/mismatching value for {$profileField}"
621 * check profile apply Without ProfileId
623 function testProfileApplyWithoutProfileId() {
627 $result = $this->callAPIFailure('profile', 'apply', $params,
628 'Mandatory key(s) missing from params array: profile_id');
632 * check profile apply with no invalid profile Id
634 function testProfileApplyInvalidProfileId() {
637 'profile_id' => 1000,
639 $result = $this->callAPIFailure('profile', 'apply', $params);
645 function testProfileApply() {
646 $pofileFieldValues = $this->_createIndividualContact();
647 current($pofileFieldValues);
648 $contactId = key($pofileFieldValues);
651 'profile_id' => $this->_profileID
,
652 'contact_id' => $contactId,
653 'first_name' => 'abc2',
654 'last_name' => 'xyz2',
655 'email-Primary' => 'abc2.xyz2@gmail.com',
656 'phone-1-1' => '022 321 826',
657 'country-1' => '1013',
658 'state_province-1' => '1000',
661 $result = $this->callAPIAndDocument('profile', 'apply', $params, __FUNCTION__
, __FILE__
);
663 // Expected field values
664 $expected['contact'] = array(
665 'contact_id' => $contactId,
666 'contact_type' => 'Individual',
667 'first_name' => 'abc2',
668 'last_name' => 'xyz2',
670 $expected['email'] = array(
671 'location_type_id' => 1,
673 'email' => 'abc2.xyz2@gmail.com',
676 $expected['phone'] = array(
677 'location_type_id' => 1,
679 'phone_type_id' => 1,
680 'phone' => '022 321 826',
682 $expected['address'] = array(
683 'location_type_id' => 1,
685 'country_id' => 1013,
686 'state_province_id' => 1000,
689 foreach ($expected['contact'] as $field => $value) {
690 $this->assertEquals($value, CRM_Utils_Array
::value($field, $result['values']), "In line " . __LINE__
. " error message: " . "missing/mismatching value for {$field}"
695 'email', 'phone', 'address') as $fieldType) {
696 $typeValues = array_pop($result['values'][$fieldType]);
697 foreach ($expected[$fieldType] as $field => $value) {
698 $this->assertEquals($value, CRM_Utils_Array
::value($field, $typeValues), "In line " . __LINE__
. " error message: " . "missing/mismatching value for {$field} ({$fieldType})"
705 * Helper function to create an Individual with address/email/phone info. Import UF Group and UF Fields
708 * @param array $params
712 function _createIndividualContact($params = array()) {
713 $contactParams = array_merge(array(
714 'first_name' => 'abc1',
715 'last_name' => 'xyz1',
716 'email' => 'abc1.xyz1@yahoo.com',
717 'api.address.create' => array(
718 'location_type_id' => 1,
720 'street_address' => '5 Saint Helier St',
722 'country' => 'United States',
723 'state_province' => 'Michigan',
724 'supplemental_address_1' => 'Hallmark Ct',
725 'supplemental_address_2' => 'Jersey Village',
726 'postal_code' => '90210',
727 'city' => 'Gotham City',
730 'api.phone.create' => array(
731 'location_type_id' => '1',
732 'phone' => '021 512 755',
733 'phone_type_id' => '1',
739 $this->_contactID
= $this->individualCreate($contactParams);
740 $this->_createIndividualProfile();
741 // expected result of above created profile with contact Id $contactId
742 $profileData[$this->_contactID
] = array(
743 'first_name' => 'abc1',
744 'last_name' => 'xyz1',
745 'email-primary' => 'abc1.xyz1@yahoo.com',
746 'phone-1-1' => '021 512 755',
747 'country-1' => '1228',
748 'state_province-1' => '1021',
757 function _createContactWithActivity() {
758 // @TODO: Create profile with custom fields
759 $op = new PHPUnit_Extensions_Database_Operation_Insert();
760 $op->execute($this->_dbconn
,
761 $this->createFlatXMLDataSet(
762 dirname(__FILE__
) . '/dataset/uf_group_contact_activity_26.xml'
765 // hack: xml data set do not accept \ 1 (CRM_Core_DAO::VALUE_SEPARATOR)
766 CRM_Core_DAO
::setFieldValue('CRM_Core_DAO_UFGroup', '26', 'group_type', 'Individual,Contact,Activity' . CRM_Core_DAO
::VALUE_SEPARATOR
. 'ActivityType:1');
768 $sourceContactId = $this->individualCreate();
769 $contactParams = array(
770 'first_name' => 'abc1',
771 'last_name' => 'xyz1',
772 'contact_type' => 'Individual',
773 'email' => 'abc1.xyz1@yahoo.com',
774 'api.address.create' => array(
775 'location_type_id' => 1,
777 'name' => 'Saint Helier St',
779 'country' => 'United States',
780 'state_province' => 'Michigan',
781 'supplemental_address_1' => 'Hallmark Ct',
782 'supplemental_address_2' => 'Jersey Village',
786 $contact = $this->callAPISuccess('contact', 'create', $contactParams);
788 $keys = array_keys($contact['values']);
789 $contactId = array_pop($keys);
791 $this->assertEquals(0, $contact['values'][$contactId]['api.address.create']['is_error'], "In line " . __LINE__
. " error message: " . CRM_Utils_Array
::value('error_message', $contact['values'][$contactId]['api.address.create'])
794 $activityParams = array(
795 'source_contact_id' => $sourceContactId,
796 'assignee_contact_id' => $contactId,
797 'activity_type_id' => '1',
798 'subject' => 'Make-it-Happen Meeting',
799 'activity_date_time' => '20110316',
801 'location' => 'Pensulvania',
802 'details' => 'a test activity',
804 'priority_id' => '1',
806 $activity = $this->callAPISuccess('activity', 'create', $activityParams);
808 $activityValues = array_pop($activity['values']);
810 // valid parameters for above profile
811 $profileParams = array(
813 'contact_id' => $contactId,
814 'activity_id' => $activityValues['id'],
817 // expected result of above created profile
819 'first_name' => 'abc1',
820 'last_name' => 'xyz1',
821 'email-Primary' => 'abc1.xyz1@yahoo.com',
822 'activity_subject' => 'Make-it-Happen Meeting',
823 'activity_details' => 'a test activity',
824 'activity_duration' => '120',
825 'activity_date_time_time' => '12:00AM',
826 'activity_date_time' => '03/16/2011',
827 'activity_status_id' => '1',
830 return array($profileParams, $expected);
835 function _createIndividualProfile() {
837 // creating these via the api as we want to utilise & test the flushing of caches when fields created
840 $ufGroupParams = array(
841 'group_type' => 'Individual,Contact',// really we should remove this & test the ufField create sets it
842 'name' => 'test_individual_contact_profile',
843 'title' => 'Flat Coffee',
844 'api.uf_field.create' => array(
846 'field_name' => 'first_name',
848 'visibility' => 'Public Pages and Listings',
849 'field_type' => 'Individual',
850 'label' => 'First Name',
853 'field_name' => 'last_name',
855 'visibility' => 'Public Pages and Listings',
856 'field_type' => 'Individual',
857 'label' => 'Last Name',
860 'field_name' => 'email',
862 'visibility' => 'Public Pages and Listings',
863 'field_type' => 'Contact',
867 'field_name' => 'phone',
869 'visibility' => 'Public Pages and Listings',
870 'field_type' => 'Contact',
871 'location_type_id' => 1,
872 'phone_type_id' => 1,
876 'field_name' => 'country',
878 'visibility' => 'Public Pages and Listings',
879 'field_type' => 'Contact',
880 'location_type_id' => 1,
884 'field_name' => 'state_province',
886 'visibility' => 'Public Pages and Listings',
887 'field_type' => 'Contact',
888 'location_type_id' => 1,
889 'label' => 'State Province'
892 'field_name' => 'postal_code',
894 'field_type' => 'Contact',
895 'location_type_id' => 1,
896 'label' => 'State Province'
900 $profile = $this->callAPISuccess('uf_group', 'create', $ufGroupParams);
901 $this->_profileID
= $profile['id'];
907 function _addCustomFieldToProfile($profileID) {
908 $ids = $this->entityCustomGroupWithSingleFieldCreate(__FUNCTION__
, '');
909 $this->uFFieldCreate(array('uf_group_id' => $profileID, 'field_name' => 'custom_' . $ids['custom_field_id'], 'contact_type' => 'Contact'));