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