Merge pull request #17706 from demeritcowboy/mysql-ssl-alt
[civicrm-core.git] / tests / phpunit / api / v3 / ContactTypeTest.php
1 <?php
2 /*
3 +--------------------------------------------------------------------+
4 | Copyright CiviCRM LLC. All rights reserved. |
5 | |
6 | This work is published under the GNU AGPLv3 license with some |
7 | permitted exceptions and without any warranty. For full license |
8 | and copyright information, see https://civicrm.org/licensing |
9 +--------------------------------------------------------------------+
10 */
11
12 /**
13 * Class api_v3_ContactTypeTest
14 * @group headless
15 */
16 class api_v3_ContactTypeTest extends CiviUnitTestCase {
17 protected $_apiversion;
18
19 public function setUp() {
20 parent::setUp();
21 $this->useTransaction(TRUE);
22 $params = [
23 'label' => 'sub_individual',
24 'name' => 'sub_individual',
25 // Individual
26 'parent_id' => 1,
27 'is_active' => 1,
28 ];
29 $result = CRM_Contact_BAO_ContactType::add($params);
30 $this->subTypeIndividual = $params['name'];
31
32 $params = [
33 'label' => 'sub_organization',
34 'name' => 'sub_organization',
35 // Organization
36 'parent_id' => 3,
37 'is_active' => 1,
38 ];
39 $result = CRM_Contact_BAO_ContactType::add($params);
40 $this->subTypeOrganization = $params['name'];
41
42 $params = [
43 'label' => 'sub_household',
44 'name' => 'sub_household',
45 // Household
46 'parent_id' => 2,
47 'is_active' => 1,
48 ];
49 $result = CRM_Contact_BAO_ContactType::add($params);
50 $this->subTypeHousehold = $params['name'];
51 }
52
53 /**
54 * Test add methods with valid data.
55 * success expected
56 * @param int $version
57 * @dataProvider versionThreeAndFour
58 */
59 public function testContactCreate($version) {
60 $this->_apiversion = $version;
61
62 // check for Type:Individual Subtype:sub_individual
63 $contactParams = [
64 'first_name' => 'Anne',
65 'last_name' => 'Grant',
66 'contact_type' => 'Individual',
67 'contact_sub_type' => $this->subTypeIndividual,
68 ];
69 $contact = $this->callAPISuccess('contact', 'create', $contactParams);
70 $params = [
71 'contact_id' => $contact['id'],
72 ];
73 $result = $this->callAPISuccess('contact', 'get', $params);
74 $this->assertEquals($result['values'][$contact['id']]['first_name'], $contactParams['first_name'], "In line " . __LINE__);
75 $this->assertEquals($result['values'][$contact['id']]['last_name'], $contactParams['last_name'], "In line " . __LINE__);
76 $this->assertEquals($result['values'][$contact['id']]['contact_type'], $contactParams['contact_type'], "In line " . __LINE__);
77 $this->assertEquals(end($result['values'][$contact['id']]['contact_sub_type']), $contactParams['contact_sub_type'], "In line " . __LINE__);
78 $this->callAPISuccess('contact', 'delete', $params);
79
80 // check for Type:Organization Subtype:sub_organization
81 $contactParams = [
82 'organization_name' => 'Compumentor',
83 'contact_type' => 'Organization',
84 'contact_sub_type' => $this->subTypeOrganization,
85 ];
86 $contact = $this->callAPISuccess('contact', 'create', $contactParams);
87
88 $params = [
89 'contact_id' => $contact['id'],
90 ];
91 $getContacts = $this->callAPISuccess('contact', 'get', $params);
92 $result = $getContacts['values'][$contact['id']];
93 $this->assertEquals($result['organization_name'], $contactParams['organization_name'], "In line " . __LINE__);
94 $this->assertEquals($result['contact_type'], $contactParams['contact_type'], "In line " . __LINE__);
95 $this->assertEquals(end($result['contact_sub_type']), $contactParams['contact_sub_type'], "In line " . __LINE__);
96 $this->callAPISuccess('contact', 'delete', $params);
97 }
98
99 /**
100 * Test add with invalid data.
101 * @param int $version
102 * @dataProvider versionThreeAndFour
103 */
104 public function testContactAddInvalidData($version) {
105 $this->_apiversion = $version;
106
107 // check for Type:Individual Subtype:sub_household
108 $contactParams = [
109 'first_name' => 'Anne',
110 'last_name' => 'Grant',
111 'contact_type' => 'Individual',
112 'contact_sub_type' => $this->subTypeHousehold,
113 ];
114 $contact = $this->callAPIFailure('contact', 'create', $contactParams);
115
116 // check for Type:Organization Subtype:sub_individual
117 $contactParams = [
118 'organization_name' => 'Compumentor',
119 'contact_type' => 'Organization',
120 'contact_sub_type' => $this->subTypeIndividual,
121 ];
122 $contact = $this->callAPIFailure('contact', 'create', $contactParams);
123 }
124
125 /**
126 * Test update with no subtype to valid subtype.
127 * success expected
128 * @param int $version
129 * @dataProvider versionThreeAndFour
130 */
131 public function testContactUpdateNoSubtypeValid($version) {
132 $this->_apiversion = $version;
133
134 // check for Type:Individual
135 $contactParams = [
136 'first_name' => 'Anne',
137 'last_name' => 'Grant',
138 'contact_type' => 'Individual',
139 ];
140 $contact = $this->callAPISuccess('contact', 'create', $contactParams);
141 // subype:sub_individual
142 $updateParams = [
143 'first_name' => 'John',
144 'last_name' => 'Grant',
145 'contact_id' => $contact['id'],
146 'contact_type' => 'Individual',
147 'contact_sub_type' => $this->subTypeIndividual,
148 ];
149 $updateContact = $this->callAPISuccess('contact', 'create', $updateParams);
150 $this->assertEquals($updateContact['id'], $contact['id'], "In line " . __LINE__);
151
152 $params = [
153 'contact_id' => $contact['id'],
154 ];
155 $getContacts = $this->callAPISuccess('contact', 'get', $params);
156 $result = $getContacts['values'][$contact['id']];
157
158 $this->assertEquals($result['first_name'], $updateParams['first_name'], "In line " . __LINE__);
159 $this->assertEquals($result['last_name'], $updateParams['last_name'], "In line " . __LINE__);
160 $this->assertEquals($result['contact_type'], $updateParams['contact_type'], "In line " . __LINE__);
161 $this->assertEquals(end($result['contact_sub_type']), $updateParams['contact_sub_type'], "In line " . __LINE__);
162 $this->callAPISuccess('contact', 'delete', $params);
163
164 // check for Type:Organization
165 $contactParams = [
166 'organization_name' => 'Compumentor',
167 'contact_type' => 'Organization',
168 ];
169 $contact = $this->callAPISuccess('contact', 'create', $contactParams);
170
171 // subype:sub_organization
172 $updateParams = [
173 'organization_name' => 'Intel Arts',
174 'contact_id' => $contact['id'],
175 'contact_type' => 'Organization',
176 'contact_sub_type' => $this->subTypeOrganization,
177 ];
178 $updateContact = $this->callAPISuccess('contact', 'create', $updateParams);
179 $this->assertEquals($updateContact['id'], $contact['id'], "In line " . __LINE__);
180
181 $params = [
182 'contact_id' => $contact['id'],
183 ];
184 $getContacts = $this->callAPISuccess('contact', 'get', $params);
185 $result = $getContacts['values'][$contact['id']];
186
187 $this->assertEquals($result['organization_name'], $updateParams['organization_name'], "In line " . __LINE__);
188 $this->assertEquals($result['contact_type'], $updateParams['contact_type'], "In line " . __LINE__);
189 $this->assertEquals(end($result['contact_sub_type']), $updateParams['contact_sub_type'], "In line " . __LINE__);
190 $this->callAPISuccess('contact', 'delete', $params);
191 }
192
193 /**
194 * Test update with no subtype to invalid subtype.
195 * @param int $version
196 * @dataProvider versionThreeAndFour
197 */
198 public function testContactUpdateNoSubtypeInvalid($version) {
199 $this->_apiversion = $version;
200
201 // check for Type:Individual
202 $contactParams = [
203 'first_name' => 'Anne',
204 'last_name' => 'Grant',
205 'contact_type' => 'Individual',
206 ];
207 $contact = $this->callAPISuccess('contact', 'create', $contactParams);
208
209 // subype:sub_household
210 $updateParams = [
211 'first_name' => 'John',
212 'last_name' => 'Grant',
213 'contact_id' => $contact['id'],
214 'contact_type' => 'Individual',
215 'contact_sub_type' => $this->subTypeHousehold,
216 ];
217 $updateContact = $this->callAPIFailure('contact', 'create', $updateParams);
218 $params = [
219 'contact_id' => $contact['id'],
220 ];
221 $this->callAPISuccess('contact', 'delete', $params);
222
223 // check for Type:Organization
224 $contactParams = [
225 'organization_name' => 'Compumentor',
226 'contact_type' => 'Organization',
227 ];
228 $contact = $this->callAPISuccess('contact', 'create', $contactParams);
229
230 $updateParams = [
231 'organization_name' => 'Intel Arts',
232 'contact_id' => $contact['id'],
233 'contact_type' => 'Organization',
234 'contact_sub_type' => $this->subTypeIndividual,
235 ];
236 $updateContact = $this->callAPIFailure('contact', 'create', $updateParams);
237 $params = [
238 'contact_id' => $contact['id'],
239 ];
240 $this->callAPISuccess('contact', 'delete', $params);
241 }
242
243 /**
244 * Test update with no subtype to valid subtype.
245 * success expected
246 * @param int $version
247 * @dataProvider versionThreeAndFour
248 */
249 public function testContactUpdateSubtypeValid($version) {
250 $this->_apiversion = $version;
251
252 $params = [
253 'label' => 'sub2_individual',
254 'name' => 'sub2_individual',
255 // Individual
256 'parent_id' => 1,
257 'is_active' => 1,
258 ];
259 $getSubtype = CRM_Contact_BAO_ContactType::add($params);
260 $subtype = $params['name'];
261
262 // check for Type:Individual subype:sub_individual
263 $contactParams = [
264 'first_name' => 'Anne',
265 'last_name' => 'Grant',
266 'contact_type' => 'Individual',
267 'contact_sub_type' => $this->subTypeIndividual,
268 ];
269 $contact = $this->callAPISuccess('contact', 'create', $contactParams);
270 // subype:sub2_individual
271 $updateParams = [
272 'id' => $contact['id'],
273 'first_name' => 'John',
274 'last_name' => 'Grant',
275 'contact_id' => $contact['id'],
276 'contact_type' => 'Individual',
277 'contact_sub_type' => $subtype,
278 ];
279 $updateContact = $this->callAPISuccess('contact', 'create', $updateParams);
280
281 $this->assertEquals($updateContact['id'], $contact['id'], "In line " . __LINE__);
282
283 $params = [
284 'contact_id' => $contact['id'],
285 ];
286 $getContacts = $this->callAPISuccess('contact', 'get', $params);
287 $result = $getContacts['values'][$contact['id']];
288
289 $this->assertEquals($result['first_name'], $updateParams['first_name'], "In line " . __LINE__);
290 $this->assertEquals($result['last_name'], $updateParams['last_name'], "In line " . __LINE__);
291 $this->assertEquals($result['contact_type'], $updateParams['contact_type'], "In line " . __LINE__);
292 $this->assertEquals(end($result['contact_sub_type']), $updateParams['contact_sub_type'], "In line " . __LINE__);
293 $this->callAPISuccess('contact', 'delete', $params);
294
295 $params = [
296 'label' => 'sub2_organization',
297 'name' => 'sub2_organization',
298 // Organization
299 'parent_id' => 3,
300 'is_active' => 1,
301 ];
302 $getSubtype = CRM_Contact_BAO_ContactType::add($params);
303 $subtype = $params['name'];
304
305 // check for Type:Organization subype:sub_organization
306 $contactParams = [
307 'organization_name' => 'Compumentor',
308 'contact_type' => 'Organization',
309 'contact_sub_type' => $this->subTypeOrganization,
310 ];
311 $contact = $this->callAPISuccess('contact', 'create', $contactParams);
312
313 // subype:sub2_organization
314 $updateParams = [
315 'organization_name' => 'Intel Arts',
316 'contact_id' => $contact['id'],
317 'contact_type' => 'Organization',
318 'contact_sub_type' => $subtype,
319 ];
320 $updateContact = $this->callAPISuccess('contact', 'create', $updateParams);
321 $this->assertEquals($updateContact['id'], $contact['id'], "In line " . __LINE__);
322
323 $params = [
324 'contact_id' => $contact['id'],
325 ];
326 $getContacts = $this->callAPISuccess('contact', 'get', $params);
327 $result = $getContacts['values'][$contact['id']];
328
329 $this->assertEquals($result['organization_name'], $updateParams['organization_name'], "In line " . __LINE__);
330 $this->assertEquals($result['contact_type'], $updateParams['contact_type'], "In line " . __LINE__);
331 $this->assertEquals(end($result['contact_sub_type']), $updateParams['contact_sub_type'], "In line " . __LINE__);
332 $this->callAPISuccess('contact', 'delete', $params);
333 }
334
335 /**
336 * Test update with no subtype to invalid subtype.
337 * @param int $version
338 * @dataProvider versionThreeAndFour
339 */
340 public function testContactUpdateSubtypeInvalid($version) {
341 $this->_apiversion = $version;
342
343 // check for Type:Individual subtype:sub_individual
344 $contactParams = [
345 'first_name' => 'Anne',
346 'last_name' => 'Grant',
347 'contact_type' => 'Individual',
348 'contact_sub_type' => $this->subTypeIndividual,
349 ];
350 $contact = $this->callAPISuccess('contact', 'create', $contactParams);
351
352 // subype:sub_household
353 $updateParams = [
354 'first_name' => 'John',
355 'last_name' => 'Grant',
356 'contact_id' => $contact['id'],
357 'contact_type' => 'Individual',
358 'contact_sub_type' => $this->subTypeHousehold,
359 ];
360 $updateContact = $this->callAPIFailure('contact', 'create', $updateParams);
361 $params = [
362 'contact_id' => $contact['id'],
363 ];
364 $this->callAPISuccess('contact', 'delete', $params);
365
366 // check for Type:Organization subtype:
367 $contactParams = [
368 'organization_name' => 'Compumentor',
369 'contact_type' => 'Organization',
370 'contact_sub_type' => $this->subTypeOrganization,
371 ];
372 $contact = $this->callAPISuccess('contact', 'create', $contactParams);
373
374 $updateParams = [
375 'organization_name' => 'Intel Arts',
376 'contact_id' => $contact['id'],
377 'contact_sub_type' => $this->subTypeIndividual,
378 ];
379 $updateContact = $this->callAPIFailure('contact', 'create', $updateParams);
380 $params = [
381 'contact_id' => $contact['id'],
382 ];
383 $this->callAPISuccess('contact', 'delete', $params);
384 }
385
386 }