Commit | Line | Data |
---|---|---|
6a488035 | 1 | <?php |
aba1cd8b EM |
2 | |
3 | /** | |
4 | * Class CRM_Core_BAO_UFFieldTest | |
acb109b7 | 5 | * @group headless |
aba1cd8b | 6 | */ |
6a488035 TO |
7 | class CRM_Core_BAO_UFFieldTest extends CiviUnitTestCase { |
8 | ||
00be9182 | 9 | public function setUp() { |
6a488035 TO |
10 | parent::setUp(); |
11 | ||
9099cab3 | 12 | $this->quickCleanup(['civicrm_uf_group', 'civicrm_uf_field']); |
6a488035 TO |
13 | } |
14 | ||
15 | /** | |
16 | * When passing in a GID, fields should be omitted if they already appear in the group. | |
17 | */ | |
18 | public function testGetAvailable_byGid() { | |
9099cab3 CW |
19 | $ufGroupId = $this->createUFGroup([ |
20 | [ | |
6a488035 TO |
21 | 'field_name' => 'do_not_sms', |
22 | 'field_type' => 'Contact', | |
9099cab3 CW |
23 | ], |
24 | [ | |
6a488035 TO |
25 | 'field_name' => 'first_name', |
26 | 'field_type' => 'Individual', | |
9099cab3 CW |
27 | ], |
28 | [ | |
6a488035 TO |
29 | 'field_name' => 'amount_level', |
30 | 'field_type' => 'Contribution', | |
9099cab3 CW |
31 | ], |
32 | [ | |
6a488035 TO |
33 | 'field_name' => 'participant_note', |
34 | 'field_type' => 'Participant', | |
9099cab3 CW |
35 | ], |
36 | [ | |
09ba1975 | 37 | 'field_name' => 'membership_join_date', |
6a488035 | 38 | 'field_type' => 'Membership', |
9099cab3 CW |
39 | ], |
40 | [ | |
6a488035 TO |
41 | 'field_name' => 'activity_date_time', |
42 | 'field_type' => 'Activity', | |
9099cab3 CW |
43 | ], |
44 | ]); | |
6a488035 TO |
45 | $fields = CRM_Core_BAO_UFField::getAvailableFields($ufGroupId); |
46 | ||
47 | // Make sure that each entity has 1+ present field and 1+ missing (already-used) field | |
39b959db SL |
48 | // already used |
49 | $this->assertFalse(isset($fields['Contact']['do_not_sms'])); | |
6a488035 TO |
50 | $this->assertEquals('city', $fields['Contact']['city']['name']); |
51 | ||
39b959db SL |
52 | // already used |
53 | $this->assertFalse(isset($fields['Individual']['first_name'])); | |
6a488035 TO |
54 | $this->assertEquals('birth_date', $fields['Individual']['birth_date']['name']); |
55 | ||
56 | $this->assertEquals('organization_name', $fields['Organization']['organization_name']['name']); | |
57 | $this->assertEquals('legal_name', $fields['Organization']['legal_name']['name']); | |
58 | ||
39b959db SL |
59 | // already used |
60 | $this->assertFalse(isset($fields['Contribution']['amount_level'])); | |
6a488035 TO |
61 | $this->assertEquals('cancel_reason', $fields['Contribution']['cancel_reason']['name']); |
62 | ||
39b959db SL |
63 | // already used |
64 | $this->assertFalse(isset($fields['Participant']['participant_note'])); | |
6a488035 TO |
65 | $this->assertEquals('participant_role', $fields['Participant']['participant_role']['name']); |
66 | ||
39b959db | 67 | // already used |
09ba1975 | 68 | $this->assertFalse(isset($fields['Membership']['membership_join_date'])); |
6a488035 TO |
69 | $this->assertEquals('end_date', $fields['Membership']['membership_end_date']['name']); |
70 | ||
39b959db SL |
71 | // already used |
72 | $this->assertFalse(isset($fields['Activity']['activity_date_time'])); | |
6a488035 TO |
73 | $this->assertEquals('subject', $fields['Activity']['activity_subject']['name']); |
74 | ||
75 | // Make sure that some of the blacklisted fields don't appear | |
76 | $this->assertFalse(isset($fields['Contribution']['is_pay_later'])); | |
77 | $this->assertFalse(isset($fields['Participant']['participant_role_id'])); | |
78 | $this->assertFalse(isset($fields['Membership']['membership_type_id'])); | |
79 | ||
80 | // This behavior is not necessarily desirable, but it's the status quo | |
81 | $this->assertEquals('first_name', $fields['Staff']['first_name']['name']); | |
82 | } | |
83 | ||
84 | /** | |
85 | * When passing in $defaults, the currently selected field should still be included -- even if | |
86 | * it's already part of the profile. | |
87 | */ | |
88 | public function testGetAvailable_byGidDefaults() { | |
9099cab3 CW |
89 | $ufGroupId = $this->createUFGroup([ |
90 | [ | |
6a488035 TO |
91 | 'field_name' => 'do_not_sms', |
92 | 'field_type' => 'Contact', | |
9099cab3 CW |
93 | ], |
94 | [ | |
6a488035 TO |
95 | 'field_name' => 'first_name', |
96 | 'field_type' => 'Individual', | |
9099cab3 CW |
97 | ], |
98 | ]); | |
99 | $defaults = ['field_name' => ['Individual', 'first_name']]; | |
6a488035 TO |
100 | $fields = CRM_Core_BAO_UFField::getAvailableFields($ufGroupId, $defaults); |
101 | ||
39b959db SL |
102 | // already used |
103 | $this->assertFalse(isset($fields['Contact']['do_not_sms'])); | |
6a488035 TO |
104 | $this->assertEquals('city', $fields['Contact']['city']['name']); |
105 | ||
39b959db SL |
106 | // used by me |
107 | $this->assertEquals('first_name', $fields['Individual']['first_name']['name']); | |
6a488035 TO |
108 | $this->assertEquals('birth_date', $fields['Individual']['birth_date']['name']); |
109 | } | |
110 | ||
111 | /** | |
112 | * When omitting a GID, return a list of all fields. | |
113 | */ | |
114 | public function testGetAvailable_full() { | |
115 | $fields = CRM_Core_BAO_UFField::getAvailableFields(); | |
116 | ||
117 | // Make sure that each entity appears with at least one field | |
118 | $this->assertEquals('do_not_sms', $fields['Contact']['do_not_sms']['name']); | |
119 | $this->assertEquals('city', $fields['Contact']['city']['name']); | |
120 | ||
121 | $this->assertEquals('first_name', $fields['Individual']['first_name']['name']); | |
122 | $this->assertEquals('birth_date', $fields['Individual']['birth_date']['name']); | |
123 | ||
124 | $this->assertEquals('organization_name', $fields['Organization']['organization_name']['name']); | |
125 | $this->assertEquals('legal_name', $fields['Organization']['legal_name']['name']); | |
126 | ||
127 | $this->assertEquals('amount_level', $fields['Contribution']['amount_level']['name']); | |
128 | $this->assertEquals('cancel_reason', $fields['Contribution']['cancel_reason']['name']); | |
129 | ||
130 | $this->assertEquals('participant_note', $fields['Participant']['participant_note']['name']); | |
131 | $this->assertEquals('participant_role', $fields['Participant']['participant_role']['name']); | |
132 | ||
09ba1975 | 133 | $this->assertEquals('join_date', $fields['Membership']['membership_join_date']['name']); |
6a488035 TO |
134 | $this->assertEquals('end_date', $fields['Membership']['membership_end_date']['name']); |
135 | ||
136 | $this->assertEquals('activity_date_time', $fields['Activity']['activity_date_time']['name']); | |
137 | $this->assertEquals('subject', $fields['Activity']['activity_subject']['name']); | |
138 | ||
139 | // Make sure that some of the blacklisted fields don't appear | |
140 | $this->assertFalse(isset($fields['Contribution']['is_pay_later'])); | |
141 | $this->assertFalse(isset($fields['Participant']['participant_role_id'])); | |
142 | $this->assertFalse(isset($fields['Membership']['membership_type_id'])); | |
143 | ||
144 | // This behavior is not necessarily desirable, but it's the status quo | |
145 | $this->assertEquals('first_name', $fields['Staff']['first_name']['name']); | |
146 | } | |
147 | ||
148 | /** | |
149 | * When omitting a GID, return a list of all fields. | |
150 | */ | |
151 | public function testGetAvailableFlat() { | |
152 | $fields = CRM_Core_BAO_UFField::getAvailableFieldsFlat(); | |
153 | ||
154 | // Make sure that each entity appears with at least one field | |
155 | $this->assertEquals('Contact', $fields['do_not_sms']['field_type']); | |
156 | $this->assertEquals('Contact', $fields['city']['field_type']); | |
157 | ||
158 | $this->assertEquals('Individual', $fields['first_name']['field_type']); | |
159 | $this->assertEquals('Individual', $fields['birth_date']['field_type']); | |
160 | ||
161 | $this->assertEquals('Organization', $fields['organization_name']['field_type']); | |
162 | $this->assertEquals('Organization', $fields['legal_name']['field_type']); | |
163 | ||
164 | $this->assertEquals('Contribution', $fields['amount_level']['field_type']); | |
165 | $this->assertEquals('Contribution', $fields['cancel_reason']['field_type']); | |
166 | ||
167 | $this->assertEquals('Participant', $fields['participant_note']['field_type']); | |
168 | $this->assertEquals('Participant', $fields['participant_role']['field_type']); | |
169 | ||
09ba1975 | 170 | $this->assertEquals('Membership', $fields['membership_join_date']['field_type']); |
6a488035 TO |
171 | $this->assertEquals('Membership', $fields['membership_end_date']['field_type']); |
172 | ||
173 | $this->assertEquals('Activity', $fields['activity_date_time']['field_type']); | |
174 | $this->assertEquals('Activity', $fields['activity_subject']['field_type']); | |
175 | ||
176 | // Make sure that some of the blacklisted fields don't appear | |
177 | $this->assertFalse(isset($fields['is_pay_later'])); | |
178 | $this->assertFalse(isset($fields['participant_role_id'])); | |
179 | $this->assertFalse(isset($fields['membership_type_id'])); | |
180 | } | |
181 | ||
182 | /** | |
183 | * Make sure that the existence of a profile doesn't break listing all fields | |
184 | * | |
92915c55 TO |
185 | * public function testGetAvailable_mixed() { |
186 | * // FIXME | |
187 | * $this->testGetAvailable_full(); | |
188 | * // $this->testGetAvailable_byGid(); | |
189 | * $this->testGetAvailable_full(); | |
190 | * // $this->testGetAvailable_byGid(); | |
191 | * } // */ | |
6a488035 TO |
192 | |
193 | /** | |
e16033b4 TO |
194 | * @param array $fields |
195 | * List of fields to include in the profile. | |
a6c01b45 CW |
196 | * @return int |
197 | * field id | |
6a488035 TO |
198 | */ |
199 | protected function createUFGroup($fields) { | |
200 | $ufGroup = CRM_Core_DAO::createTestObject('CRM_Core_DAO_UFGroup'); | |
201 | $this->assertTrue(is_numeric($ufGroup->id)); | |
202 | ||
203 | foreach ($fields as $field) { | |
9099cab3 | 204 | $defaults = [ |
6a488035 TO |
205 | 'uf_group_id' => $ufGroup->id, |
206 | 'visibility' => 'Public Pages and Listings', | |
207 | 'weight' => 1, | |
208 | 'label' => 'Label for ' . $field['field_name'], | |
209 | 'is_searchable' => 1, | |
210 | 'is_active' => 1, | |
211 | 'location_type_id' => NULL, | |
9099cab3 | 212 | ]; |
6a488035 | 213 | $params = array_merge($field, $defaults); |
bdb36a1a | 214 | $ufField = $this->callAPISuccess('UFField', 'create', $params); |
6a488035 TO |
215 | $this->assertAPISuccess($ufField); |
216 | } | |
217 | ||
218 | return $ufGroup->id; | |
219 | } | |
96025800 | 220 | |
6a488035 | 221 | } |