3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.7 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2015 |
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
19 | You should have received a copy of the GNU Affero General Public |
20 | License and the CiviCRM Licensing Exception along |
21 | with this program; if not, contact CiviCRM LLC |
22 | at info[AT]civicrm[DOT]org. If you have questions about the |
23 | GNU Affero General Public License or the licensing of CiviCRM, |
24 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
25 +--------------------------------------------------------------------+
29 * Tests for pseudoconstant retrieval
31 class CRM_Core_PseudoConstantTest
extends CiviUnitTestCase
{
33 public function setUp() {
36 $this->loadAllFixtures();
38 CRM_Core_BAO_ConfigSetting
::enableComponent('CiviCase');
39 CRM_Core_BAO_ConfigSetting
::enableComponent('CiviCampaign');
43 * Assure CRM_Core_PseudoConstant::get() is working properly for a range of
44 * DAO fields having a <pseudoconstant> tag in the XML schema.
46 public function testOptionValues() {
48 // Create a custom field group for testing.
49 $custom_group_name = md5(microtime());
51 'title' => $custom_group_name,
52 'extends' => 'Individual',
55 $result = civicrm_api3('customGroup', 'create', $api_params);
57 // Add a custom field to the above field group.
60 'custom_group_id' => $result['id'],
61 'label' => $custom_group_name,
62 'html_type' => 'Select',
63 'data_type' => 'String',
65 'option_values' => array(
74 $result = civicrm_api3('custom_field', 'create', $api_params);
75 $customFieldId = $result['id'];
77 // Create a Contact Group for testing.
78 $group_name = md5(microtime());
80 'title' => $group_name,
83 $result = civicrm_api3('group', 'create', $api_params);
85 // Create a PaymentProcessor for testing.
86 $pp_name = md5(microtime());
89 'payment_processor_type_id' => 'Dummy',
91 'user_name' => $pp_name,
92 'class_name' => 'Payment_Dummy',
93 'url_site' => 'https://test.com/',
94 'url_recur' => 'https://test.com/',
97 $result = civicrm_api3('payment_processor', 'create', $api_params);
99 // Create a Campaign for testing.
100 $campaign_name = md5(microtime());
102 'title' => $campaign_name,
106 $result = civicrm_api3('campaign', 'create', $api_params);
108 // Create a membership type for testing.
109 $membership_type = md5(microtime());
111 'name' => $membership_type,
113 'financial_type_id' => 1,
115 'member_of_contact_id' => 1,
116 'duration_unit' => 'day',
117 'duration_interval' => 1,
119 $result = civicrm_api3('membership_type', 'create', $api_params);
121 // Create a contribution page for testing.
122 $contribution_page = md5(microtime());
124 'title' => $contribution_page,
126 'financial_type_id' => 1,
128 $result = civicrm_api3('contribution_page', 'create', $api_params);
131 * daoName/field combinations to test
132 * Format: array[DAO Name] = $properties, where properties is an array whose
133 * named members can be:
134 * - fieldName: the SQL column name within the DAO table.
135 * - sample: Any one value which is expected in the list of option values.
136 * - exclude: Any one value which should not be in the list.
137 * - max: integer (default = 20) maximum number of option values expected.
140 'CRM_ACL_DAO_ACL' => array(
142 'fieldName' => 'operation',
146 'CRM_Contact_DAO_Group' => array(
148 'fieldName' => 'visibility',
149 'sample' => 'Public Pages',
152 'CRM_Contact_DAO_GroupContact' => array(
154 'fieldName' => 'group_id',
155 'sample' => $group_name,
158 'fieldName' => 'status',
162 'CRM_Contact_DAO_GroupContactCache' => array(
164 'fieldName' => 'group_id',
165 'sample' => $group_name,
168 'CRM_Contact_DAO_GroupOrganization' => array(
170 'fieldName' => 'group_id',
171 'sample' => $group_name,
174 'CRM_Contact_DAO_SubscriptionHistory' => array(
176 'fieldName' => 'group_id',
177 'sample' => $group_name,
180 'fieldName' => 'method',
184 'fieldName' => 'status',
188 'CRM_Core_DAO_Cache' => array(
190 'fieldName' => 'component_id',
191 'sample' => 'CiviMail',
194 'CRM_Contact_DAO_ACLContactCache' => array(
196 'fieldName' => 'operation',
200 'CRM_Core_DAO_Setting' => array(
202 'fieldName' => 'component_id',
203 'sample' => 'CiviMail',
206 'CRM_Core_DAO_ActionSchedule' => array(
208 'fieldName' => 'group_id',
209 'sample' => $group_name,
212 'fieldName' => 'start_action_unit',
216 'fieldName' => 'repetition_frequency_unit',
220 'fieldName' => 'end_frequency_unit',
224 'fieldName' => 'mode',
228 'CRM_Dedupe_DAO_RuleGroup' => array(
230 'fieldName' => 'contact_type',
231 'sample' => 'Individual',
234 'fieldName' => 'used',
235 'sample' => 'Unsupervised',
238 'CRM_Activity_DAO_Activity' => array(
240 'fieldName' => 'activity_type_id',
245 'fieldName' => 'status_id',
246 'sample' => 'Scheduled',
249 'fieldName' => 'priority_id',
250 'sample' => 'Urgent',
253 'fieldName' => 'engagement_level',
257 'fieldName' => 'medium_id',
261 'fieldName' => 'campaign_id',
262 'sample' => $campaign_name,
265 'CRM_Campaign_DAO_Campaign' => array(
267 'fieldName' => 'campaign_type_id',
268 'sample' => 'Constituent Engagement',
272 'fieldName' => 'status_id',
273 'sample' => 'Completed',
277 'CRM_Campaign_DAO_Survey' => array(
279 'fieldName' => 'campaign_id',
280 'sample' => $campaign_name,
283 'fieldName' => 'activity_type_id',
284 'sample' => 'Phone Call',
288 'CRM_Campaign_DAO_CampaignGroup' => array(
290 'fieldName' => 'campaign_id',
291 'sample' => $campaign_name,
294 'fieldName' => 'group_type',
295 'sample' => 'Include',
298 'CRM_Contact_DAO_RelationshipType' => array(
300 'fieldName' => 'contact_type_a',
301 'sample' => 'Individual',
304 'fieldName' => 'contact_type_b',
305 'sample' => 'Organization',
308 'CRM_Event_DAO_ParticipantStatusType' => array(
310 'fieldName' => 'class',
311 'sample' => 'Waiting',
314 'fieldName' => 'visibility_id',
315 'sample' => 'Public',
318 'CRM_Price_DAO_LineItem' => array(
320 'fieldName' => 'financial_type_id',
321 'sample' => 'Donation',
324 'CRM_Price_DAO_PriceField' => array(
326 'fieldName' => 'html_type',
327 'sample' => 'Select',
330 'fieldName' => 'visibility_id',
331 'sample' => 'Public',
334 'CRM_Price_DAO_PriceFieldValue' => array(
336 'fieldName' => 'financial_type_id',
337 'sample' => 'Donation',
340 'CRM_Price_DAO_PriceSet' => array(
342 'fieldName' => 'domain_id',
343 'sample' => 'Default Domain Name',
346 'fieldName' => 'extends',
347 'sample' => 'CiviEvent',
350 'fieldName' => 'financial_type_id',
351 'sample' => 'Donation',
354 'CRM_Financial_DAO_EntityFinancialAccount' => array(
356 'fieldName' => 'financial_account_id',
357 'sample' => 'Member Dues',
360 'fieldName' => 'account_relationship',
361 'sample' => 'Income Account is',
364 'CRM_Financial_DAO_FinancialItem' => array(
366 'fieldName' => 'status_id',
367 'sample' => 'Partially paid',
370 'fieldName' => 'financial_account_id',
371 'sample' => 'Accounts Receivable',
374 'fieldName' => 'currency',
375 'sample' => array('USD' => 'US Dollar'),
379 'CRM_Financial_DAO_FinancialTrxn' => array(
381 'fieldName' => 'from_financial_account_id',
382 'sample' => 'Accounts Receivable',
385 'fieldName' => 'to_financial_account_id',
386 'sample' => 'Accounts Receivable',
389 'fieldName' => 'currency',
390 'sample' => array('USD' => 'US Dollar'),
394 'fieldName' => 'payment_instrument_id',
398 'CRM_Financial_DAO_FinancialAccount' => array(
400 'fieldName' => 'financial_account_type_id',
401 'sample' => 'Cost of Sales',
404 'CRM_Financial_DAO_PaymentProcessor' => array(
406 'fieldName' => 'domain_id',
407 'sample' => 'Default Domain Name',
410 'CRM_Financial_BAO_PaymentProcessorType' => array(
412 'fieldName' => 'billing_mode',
416 'CRM_Core_DAO_UFField' => array(
418 'fieldName' => 'uf_group_id',
419 'sample' => 'Name and Address',
422 'fieldName' => 'visibility',
423 'sample' => 'Expose Publicly',
426 'CRM_Core_DAO_UFJoin' => array(
428 'fieldName' => 'uf_group_id',
429 'sample' => 'Name and Address',
432 'CRM_Core_DAO_UFMatch' => array(
434 'fieldName' => 'domain_id',
435 'sample' => 'Default Domain Name',
438 'CRM_Core_DAO_Job' => array(
440 'fieldName' => 'domain_id',
441 'sample' => 'Default Domain Name',
444 'fieldName' => 'run_frequency',
448 'CRM_Core_DAO_JobLog' => array(
450 'fieldName' => 'domain_id',
451 'sample' => 'Default Domain Name',
454 'CRM_Contribute_DAO_ContributionSoft' => array(
456 'fieldName' => 'currency',
457 'sample' => array('USD' => 'US Dollar'),
461 'fieldName' => 'soft_credit_type_id',
462 'sample' => 'In Honor of',
465 'CRM_Contribute_DAO_Product' => array(
467 'fieldName' => 'currency',
468 'sample' => array('USD' => 'US Dollar'),
472 'fieldName' => 'financial_type_id',
473 'sample' => 'Donation',
476 'fieldName' => 'period_type',
477 'sample' => 'Rolling',
480 'fieldName' => 'duration_unit',
484 'fieldName' => 'frequency_unit',
488 'CRM_Contribute_DAO_ContributionProduct' => array(
490 'fieldName' => 'financial_type_id',
491 'sample' => 'Donation',
494 'CRM_Contribute_DAO_ContributionRecur' => array(
496 'fieldName' => 'currency',
497 'sample' => array('USD' => 'US Dollar'),
501 'fieldName' => 'frequency_unit',
505 'fieldName' => 'contribution_status_id',
506 'sample' => 'Completed',
509 'fieldName' => 'financial_type_id',
510 'sample' => 'Donation',
513 'fieldName' => 'payment_instrument_id',
517 'fieldName' => 'campaign_id',
518 'sample' => $campaign_name,
521 'CRM_Pledge_DAO_PledgePayment' => array(
523 'fieldName' => 'currency',
524 'sample' => array('USD' => 'US Dollar'),
528 'CRM_Pledge_DAO_Pledge' => array(
530 'fieldName' => 'currency',
531 'sample' => array('USD' => 'US Dollar'),
535 'fieldName' => 'financial_type_id',
536 'sample' => 'Donation',
539 'fieldName' => 'frequency_unit',
543 'fieldName' => 'campaign_id',
544 'sample' => $campaign_name,
547 'CRM_PCP_DAO_PCP' => array(
549 'fieldName' => 'currency',
550 'sample' => array('USD' => 'US Dollar'),
554 'fieldName' => 'status_id',
555 'sample' => 'Approved',
558 'CRM_Core_DAO_CustomField' => array(
560 'fieldName' => 'custom_group_id',
561 'sample' => $custom_group_name,
564 'fieldName' => 'data_type',
565 'sample' => 'Alphanumeric',
568 'fieldName' => 'html_type',
569 'sample' => 'Select Date',
572 'CRM_Core_DAO_CustomGroup' => array(
574 'fieldName' => 'style',
575 'sample' => 'Inline',
578 'CRM_Core_DAO_Dashboard' => array(
580 'fieldName' => 'domain_id',
581 'sample' => 'Default Domain Name',
584 'CRM_Core_DAO_Tag' => array(
586 'fieldName' => 'used_for',
587 'sample' => 'Contacts',
590 'CRM_Core_DAO_EntityTag' => array(
592 'fieldName' => 'tag_id',
593 'sample' => 'Government Entity',
596 'CRM_Core_DAO_Extension' => array(
598 'fieldName' => 'type',
599 'sample' => 'Module',
602 'CRM_Core_DAO_OptionValue' => array(
604 'fieldName' => 'option_group_id',
605 'sample' => 'gender',
609 'fieldName' => 'component_id',
610 'sample' => 'CiviContribute',
613 'fieldName' => 'domain_id',
614 'sample' => 'Default Domain Name',
617 'CRM_Core_DAO_MailSettings' => array(
619 'fieldName' => 'domain_id',
620 'sample' => 'Default Domain Name',
623 'fieldName' => 'protocol',
624 'sample' => 'Localdir',
627 'CRM_Core_DAO_Managed' => array(
629 'fieldName' => 'cleanup',
630 'sample' => 'Always',
633 'CRM_Core_DAO_Mapping' => array(
635 'fieldName' => 'mapping_type_id',
636 'sample' => 'Search Builder',
639 'CRM_Core_DAO_Navigation' => array(
641 'fieldName' => 'domain_id',
642 'sample' => 'Default Domain Name',
645 'CRM_Core_DAO_Phone' => array(
647 'fieldName' => 'phone_type_id',
651 'fieldName' => 'location_type_id',
655 'CRM_Core_DAO_PrintLabel' => array(
657 'fieldName' => 'label_format_name',
658 'sample' => 'Avery 5395',
661 'fieldName' => 'label_type_id',
662 'sample' => 'Event Badge',
665 'CRM_Core_DAO_Email' => array(
667 'fieldName' => 'location_type_id',
671 'CRM_Core_DAO_Address' => array(
673 'fieldName' => 'location_type_id',
677 'CRM_Core_DAO_Website' => array(
679 'fieldName' => 'website_type_id',
680 'sample' => 'Facebook',
683 'CRM_Core_DAO_WordReplacement' => array(
685 'fieldName' => 'match_type',
686 'sample' => 'Exact Match',
689 'fieldName' => 'domain_id',
690 'sample' => 'Default Domain Name',
693 'CRM_Core_DAO_MappingField' => array(
695 'fieldName' => 'website_type_id',
696 'sample' => 'Facebook',
699 'fieldName' => 'im_provider_id',
703 'fieldName' => 'operator',
707 'CRM_Contact_DAO_Contact' => array(
709 'fieldName' => 'prefix_id',
713 'fieldName' => 'suffix_id',
717 'fieldName' => 'gender_id',
721 'fieldName' => 'preferred_communication_method',
722 'sample' => 'Postal Mail',
725 'fieldName' => 'contact_type',
726 'sample' => 'Individual',
730 'fieldName' => 'contact_sub_type',
732 'exclude' => 'Individual',
735 'fieldName' => 'preferred_language',
736 'sample' => array('en_US' => 'English (United States)'),
740 'fieldName' => 'preferred_mail_format',
744 'fieldName' => 'communication_style_id',
745 'sample' => 'Formal',
748 'fieldName' => "custom_$customFieldId",
749 'sample' => array('foo' => 'Foo'),
753 'CRM_Batch_DAO_Batch' => array(
755 'fieldName' => 'type_id',
756 'sample' => 'Membership',
759 'fieldName' => 'status_id',
760 'sample' => 'Reopened',
763 'fieldName' => 'mode_id',
764 'sample' => 'Automatic Batch',
767 'fieldName' => 'payment_instrument_id',
771 'CRM_Core_DAO_IM' => array(
773 'fieldName' => 'provider_id',
777 'fieldName' => 'location_type_id',
781 'CRM_Event_DAO_Participant' => array(
783 'fieldName' => 'status_id',
784 'sample' => 'Registered',
787 'fieldName' => 'role_id',
788 'sample' => 'Speaker',
791 'fieldName' => 'fee_currency',
792 'sample' => array('USD' => 'US Dollar'),
796 'fieldName' => 'campaign_id',
797 'sample' => $campaign_name,
800 'CRM_Event_DAO_Event' => array(
802 'fieldName' => 'event_type_id',
803 'sample' => 'Fundraiser',
806 'fieldName' => 'participant_listing_id',
807 'sample' => 'Name and Email',
810 'fieldName' => 'payment_processor',
811 'sample' => $pp_name,
814 'fieldName' => 'financial_type_id',
815 'sample' => 'Donation',
818 'fieldName' => 'default_role_id',
819 'sample' => 'Attendee',
822 'fieldName' => 'currency',
823 'sample' => array('USD' => 'US Dollar'),
827 'fieldName' => 'campaign_id',
828 'sample' => $campaign_name,
831 'CRM_Core_DAO_Menu' => array(
833 'fieldName' => 'domain_id',
834 'sample' => 'Default Domain Name',
837 'fieldName' => 'component_id',
838 'sample' => 'CiviMember',
841 'CRM_Member_DAO_Membership' => array(
843 'fieldName' => 'membership_type_id',
844 'sample' => $membership_type,
847 'fieldName' => 'status_id',
851 'fieldName' => 'campaign_id',
852 'sample' => $campaign_name,
855 'CRM_Member_DAO_MembershipStatus' => array(
857 'fieldName' => 'start_event',
858 'sample' => 'start date',
861 'fieldName' => 'end_event',
862 'sample' => 'member since',
865 'fieldName' => 'start_event_adjust_unit',
869 'fieldName' => 'end_event_adjust_unit',
873 'CRM_Member_DAO_MembershipType' => array(
875 'fieldName' => 'visibility',
876 'sample' => 'Public',
879 'fieldName' => 'domain_id',
880 'sample' => 'Default Domain Name',
883 'fieldName' => 'financial_type_id',
884 'sample' => 'Donation',
887 'fieldName' => 'duration_unit',
888 'sample' => 'lifetime',
891 'fieldName' => 'period_type',
892 'sample' => 'Rolling',
895 'CRM_Mailing_DAO_Mailing' => array(
897 'fieldName' => 'approval_status_id',
898 'sample' => 'Approved',
901 'fieldName' => 'domain_id',
902 'sample' => 'Default Domain Name',
905 'fieldName' => 'visibility',
906 'sample' => 'Public Pages',
909 'fieldName' => 'campaign_id',
910 'sample' => $campaign_name,
913 'CRM_Mailing_DAO_Component' => array(
915 'fieldName' => 'component_type',
916 'sample' => 'Header',
919 'CRM_Mailing_DAO_MailingGroup' => array(
921 'fieldName' => 'group_type',
922 'sample' => 'Include',
925 'CRM_Mailing_DAO_MailingJob' => array(
927 'fieldName' => 'status',
928 'sample' => 'Scheduled',
931 'CRM_Mailing_Event_DAO_Bounce' => array(
933 'fieldName' => 'bounce_type_id',
934 'sample' => 'Invalid',
937 'CRM_Mailing_Event_DAO_Subscribe' => array(
939 'fieldName' => 'group_id',
940 'sample' => $group_name,
943 'CRM_Grant_DAO_Grant' => array(
945 'fieldName' => 'status_id',
946 'sample' => 'Approved for Payment',
949 'fieldName' => 'grant_type_id',
950 'sample' => 'Emergency',
953 'fieldName' => 'currency',
954 'sample' => array('USD' => 'US Dollar'),
958 'fieldName' => 'financial_type_id',
959 'sample' => 'Donation',
962 'CRM_Contribute_DAO_Contribution' => array(
964 'fieldName' => 'payment_instrument_id',
965 'sample' => 'Credit Card',
968 'fieldName' => 'financial_type_id',
969 'sample' => 'Donation',
972 'fieldName' => 'currency',
973 'sample' => array('USD' => 'US Dollar'),
977 'fieldName' => 'contribution_status_id',
978 'sample' => 'Completed',
981 'fieldName' => 'contribution_page_id',
982 'sample' => $contribution_page,
985 'fieldName' => 'campaign_id',
986 'sample' => $campaign_name,
989 'CRM_Contribute_DAO_PremiumsProduct' => array(
991 'fieldName' => 'financial_type_id',
992 'sample' => 'Donation',
995 'CRM_Contribute_DAO_ContributionPage' => array(
997 'fieldName' => 'payment_processor',
998 'sample' => $pp_name,
1001 'fieldName' => 'financial_type_id',
1002 'sample' => 'Donation',
1005 'fieldName' => 'currency',
1006 'sample' => array('USD' => 'US Dollar'),
1010 'fieldName' => 'campaign_id',
1011 'sample' => $campaign_name,
1014 'CRM_Case_DAO_Case' => array(
1016 'fieldName' => 'status_id',
1017 'sample' => 'Ongoing',
1020 'fieldName' => 'case_type_id',
1021 'sample' => 'Housing Support',
1024 'CRM_Report_DAO_ReportInstance' => array(
1026 'fieldName' => 'domain_id',
1027 'sample' => 'Default Domain Name',
1032 foreach ($fields as $daoName => $daoFields) {
1033 foreach ($daoFields as $field) {
1034 $message = "DAO name: '{$daoName}', field: '{$field['fieldName']}'";
1036 $optionValues = $daoName::buildOptions($field['fieldName']);
1037 $this->assertNotEmpty($optionValues, $message);
1039 // Ensure sample value is contained in the returned optionValues.
1040 if (!is_array($field['sample'])) {
1041 $this->assertContains($field['sample'], $optionValues, $message);
1043 // If sample is an array, we check keys and values
1045 foreach ($field['sample'] as $key => $value) {
1046 $this->assertArrayHasKey($key, $optionValues, $message);
1047 $this->assertEquals(CRM_Utils_Array
::value($key, $optionValues), $value, $message);
1051 // Ensure exclude value is not contained in the optionValues
1052 if (!empty($field['exclude'])) {
1053 $this->assertNotContains($field['exclude'], $optionValues, $message);
1056 // Ensure count of optionValues is not extraordinarily high.
1057 $max = CRM_Utils_Array
::value('max', $field, 20);
1058 $this->assertLessThanOrEqual($max, count($optionValues), $message);
1063 public function testContactTypes() {
1065 'Individual' => 'Individual',
1066 'Household' => 'Household',
1067 'Organization' => 'Organization',
1072 3 => 'Organization',
1074 // By default this should return an array keyed by name
1075 $result = CRM_Contact_DAO_Contact
::buildOptions('contact_type');
1076 $this->assertEquals($byName, $result);
1077 // But we can also fetch by ID
1078 $result = CRM_Core_PseudoConstant
::get('CRM_Contact_DAO_Contact', 'contact_type', array(
1079 'keyColumn' => 'id',
1080 'labelColumn' => 'name',
1082 $this->assertEquals($byId, $result);
1083 // Make sure flip param works
1084 $result = CRM_Core_PseudoConstant
::get('CRM_Contact_DAO_Contact', 'contact_type', array(
1085 'keyColumn' => 'id',
1086 'labelColumn' => 'name',
1089 $this->assertEquals(array_flip($byId), $result);