3 +--------------------------------------------------------------------+
4 | Copyright CiviCRM LLC. All rights reserved. |
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 +--------------------------------------------------------------------+
13 * Class api_v3_ContactTypeTest
16 class api_v3_ContactTypeTest
extends CiviUnitTestCase
{
17 protected $_apiversion;
19 public function setUp() {
21 $this->useTransaction(TRUE);
23 'label' => 'sub_individual',
24 'name' => 'sub_individual',
29 $result = CRM_Contact_BAO_ContactType
::add($params);
30 $this->subTypeIndividual
= $params['name'];
33 'label' => 'sub_organization',
34 'name' => 'sub_organization',
39 $result = CRM_Contact_BAO_ContactType
::add($params);
40 $this->subTypeOrganization
= $params['name'];
43 'label' => 'sub_household',
44 'name' => 'sub_household',
49 $result = CRM_Contact_BAO_ContactType
::add($params);
50 $this->subTypeHousehold
= $params['name'];
54 * Test add methods with valid data.
57 * @dataProvider versionThreeAndFour
59 public function testContactCreate($version) {
60 $this->_apiversion
= $version;
62 // check for Type:Individual Subtype:sub_individual
64 'first_name' => 'Anne',
65 'last_name' => 'Grant',
66 'contact_type' => 'Individual',
67 'contact_sub_type' => $this->subTypeIndividual
,
69 $contact = $this->callAPISuccess('contact', 'create', $contactParams);
71 'contact_id' => $contact['id'],
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);
80 // check for Type:Organization Subtype:sub_organization
82 'organization_name' => 'Compumentor',
83 'contact_type' => 'Organization',
84 'contact_sub_type' => $this->subTypeOrganization
,
86 $contact = $this->callAPISuccess('contact', 'create', $contactParams);
89 'contact_id' => $contact['id'],
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);
100 * Test add with invalid data.
101 * @param int $version
102 * @dataProvider versionThreeAndFour
104 public function testContactAddInvalidData($version) {
105 $this->_apiversion
= $version;
107 // check for Type:Individual Subtype:sub_household
109 'first_name' => 'Anne',
110 'last_name' => 'Grant',
111 'contact_type' => 'Individual',
112 'contact_sub_type' => $this->subTypeHousehold
,
114 $contact = $this->callAPIFailure('contact', 'create', $contactParams);
116 // check for Type:Organization Subtype:sub_individual
118 'organization_name' => 'Compumentor',
119 'contact_type' => 'Organization',
120 'contact_sub_type' => $this->subTypeIndividual
,
122 $contact = $this->callAPIFailure('contact', 'create', $contactParams);
126 * Test update with no subtype to valid subtype.
128 * @param int $version
129 * @dataProvider versionThreeAndFour
131 public function testContactUpdateNoSubtypeValid($version) {
132 $this->_apiversion
= $version;
134 // check for Type:Individual
136 'first_name' => 'Anne',
137 'last_name' => 'Grant',
138 'contact_type' => 'Individual',
140 $contact = $this->callAPISuccess('contact', 'create', $contactParams);
141 // subype:sub_individual
143 'first_name' => 'John',
144 'last_name' => 'Grant',
145 'contact_id' => $contact['id'],
146 'contact_type' => 'Individual',
147 'contact_sub_type' => $this->subTypeIndividual
,
149 $updateContact = $this->callAPISuccess('contact', 'create', $updateParams);
150 $this->assertEquals($updateContact['id'], $contact['id'], "In line " . __LINE__
);
153 'contact_id' => $contact['id'],
155 $getContacts = $this->callAPISuccess('contact', 'get', $params);
156 $result = $getContacts['values'][$contact['id']];
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);
164 // check for Type:Organization
166 'organization_name' => 'Compumentor',
167 'contact_type' => 'Organization',
169 $contact = $this->callAPISuccess('contact', 'create', $contactParams);
171 // subype:sub_organization
173 'organization_name' => 'Intel Arts',
174 'contact_id' => $contact['id'],
175 'contact_type' => 'Organization',
176 'contact_sub_type' => $this->subTypeOrganization
,
178 $updateContact = $this->callAPISuccess('contact', 'create', $updateParams);
179 $this->assertEquals($updateContact['id'], $contact['id'], "In line " . __LINE__
);
182 'contact_id' => $contact['id'],
184 $getContacts = $this->callAPISuccess('contact', 'get', $params);
185 $result = $getContacts['values'][$contact['id']];
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);
194 * Test update with no subtype to invalid subtype.
195 * @param int $version
196 * @dataProvider versionThreeAndFour
198 public function testContactUpdateNoSubtypeInvalid($version) {
199 $this->_apiversion
= $version;
201 // check for Type:Individual
203 'first_name' => 'Anne',
204 'last_name' => 'Grant',
205 'contact_type' => 'Individual',
207 $contact = $this->callAPISuccess('contact', 'create', $contactParams);
209 // subype:sub_household
211 'first_name' => 'John',
212 'last_name' => 'Grant',
213 'contact_id' => $contact['id'],
214 'contact_type' => 'Individual',
215 'contact_sub_type' => $this->subTypeHousehold
,
217 $updateContact = $this->callAPIFailure('contact', 'create', $updateParams);
219 'contact_id' => $contact['id'],
221 $this->callAPISuccess('contact', 'delete', $params);
223 // check for Type:Organization
225 'organization_name' => 'Compumentor',
226 'contact_type' => 'Organization',
228 $contact = $this->callAPISuccess('contact', 'create', $contactParams);
231 'organization_name' => 'Intel Arts',
232 'contact_id' => $contact['id'],
233 'contact_type' => 'Organization',
234 'contact_sub_type' => $this->subTypeIndividual
,
236 $updateContact = $this->callAPIFailure('contact', 'create', $updateParams);
238 'contact_id' => $contact['id'],
240 $this->callAPISuccess('contact', 'delete', $params);
244 * Test update with no subtype to valid subtype.
246 * @param int $version
247 * @dataProvider versionThreeAndFour
249 public function testContactUpdateSubtypeValid($version) {
250 $this->_apiversion
= $version;
253 'label' => 'sub2_individual',
254 'name' => 'sub2_individual',
259 $getSubtype = CRM_Contact_BAO_ContactType
::add($params);
260 $subtype = $params['name'];
262 // check for Type:Individual subype:sub_individual
264 'first_name' => 'Anne',
265 'last_name' => 'Grant',
266 'contact_type' => 'Individual',
267 'contact_sub_type' => $this->subTypeIndividual
,
269 $contact = $this->callAPISuccess('contact', 'create', $contactParams);
270 // subype:sub2_individual
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,
279 $updateContact = $this->callAPISuccess('contact', 'create', $updateParams);
281 $this->assertEquals($updateContact['id'], $contact['id'], "In line " . __LINE__
);
284 'contact_id' => $contact['id'],
286 $getContacts = $this->callAPISuccess('contact', 'get', $params);
287 $result = $getContacts['values'][$contact['id']];
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);
296 'label' => 'sub2_organization',
297 'name' => 'sub2_organization',
302 $getSubtype = CRM_Contact_BAO_ContactType
::add($params);
303 $subtype = $params['name'];
305 // check for Type:Organization subype:sub_organization
307 'organization_name' => 'Compumentor',
308 'contact_type' => 'Organization',
309 'contact_sub_type' => $this->subTypeOrganization
,
311 $contact = $this->callAPISuccess('contact', 'create', $contactParams);
313 // subype:sub2_organization
315 'organization_name' => 'Intel Arts',
316 'contact_id' => $contact['id'],
317 'contact_type' => 'Organization',
318 'contact_sub_type' => $subtype,
320 $updateContact = $this->callAPISuccess('contact', 'create', $updateParams);
321 $this->assertEquals($updateContact['id'], $contact['id'], "In line " . __LINE__
);
324 'contact_id' => $contact['id'],
326 $getContacts = $this->callAPISuccess('contact', 'get', $params);
327 $result = $getContacts['values'][$contact['id']];
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);
336 * Test update with no subtype to invalid subtype.
337 * @param int $version
338 * @dataProvider versionThreeAndFour
340 public function testContactUpdateSubtypeInvalid($version) {
341 $this->_apiversion
= $version;
343 // check for Type:Individual subtype:sub_individual
345 'first_name' => 'Anne',
346 'last_name' => 'Grant',
347 'contact_type' => 'Individual',
348 'contact_sub_type' => $this->subTypeIndividual
,
350 $contact = $this->callAPISuccess('contact', 'create', $contactParams);
352 // subype:sub_household
354 'first_name' => 'John',
355 'last_name' => 'Grant',
356 'contact_id' => $contact['id'],
357 'contact_type' => 'Individual',
358 'contact_sub_type' => $this->subTypeHousehold
,
360 $updateContact = $this->callAPIFailure('contact', 'create', $updateParams);
362 'contact_id' => $contact['id'],
364 $this->callAPISuccess('contact', 'delete', $params);
366 // check for Type:Organization subtype:
368 'organization_name' => 'Compumentor',
369 'contact_type' => 'Organization',
370 'contact_sub_type' => $this->subTypeOrganization
,
372 $contact = $this->callAPISuccess('contact', 'create', $contactParams);
375 'organization_name' => 'Intel Arts',
376 'contact_id' => $contact['id'],
377 'contact_sub_type' => $this->subTypeIndividual
,
379 $updateContact = $this->callAPIFailure('contact', 'create', $updateParams);
381 'contact_id' => $contact['id'],
383 $this->callAPISuccess('contact', 'delete', $params);