Merge pull request #17253 from mattwire/utf8convertblocksize
[civicrm-core.git] / tests / phpunit / CRM / Core / BAO / AddressTest.php
CommitLineData
6a488035
TO
1<?php
2/*
3 +--------------------------------------------------------------------+
7d61e75f 4 | Copyright CiviCRM LLC. All rights reserved. |
6a488035 5 | |
7d61e75f
TO
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 |
6a488035 9 +--------------------------------------------------------------------+
d25dd0ee 10 */
6a488035 11
e9479dcf
EM
12/**
13 * Class CRM_Core_BAO_AddressTest
acb109b7 14 * @group headless
e9479dcf 15 */
6a488035 16class CRM_Core_BAO_AddressTest extends CiviUnitTestCase {
39b959db 17
00be9182 18 public function setUp() {
6a488035
TO
19 parent::setUp();
20
9099cab3 21 $this->quickCleanup(['civicrm_contact', 'civicrm_address']);
6a488035
TO
22 }
23
24 /**
100fef9d 25 * Create() method (create and update modes)
6a488035 26 */
00be9182 27 public function testCreate() {
f2040bc6 28 $contactId = $this->individualCreate();
6a488035 29
9099cab3
CW
30 $params = [];
31 $params['address']['1'] = [
6a488035
TO
32 'street_address' => 'Oberoi Garden',
33 'supplemental_address_1' => 'Attn: Accounting',
34 'supplemental_address_2' => 'Powai',
207f62c6 35 'supplemental_address_3' => 'Somewhere',
6a488035
TO
36 'city' => 'Athens',
37 'postal_code' => '01903',
38 'state_province_id' => '1000',
39 'country_id' => '1228',
40 'geo_code_1' => '18.219023',
41 'geo_code_2' => '-105.00973',
42 'location_type_id' => '1',
43 'is_primary' => '1',
44 'is_billing' => '0',
9099cab3 45 ];
6a488035
TO
46
47 $params['contact_id'] = $contactId;
48
6a488035
TO
49 $fixAddress = TRUE;
50
51 CRM_Core_BAO_Address::create($params, $fixAddress, $entity = NULL);
52 $addressId = $this->assertDBNotNull('CRM_Core_DAO_Address', 'Oberoi Garden', 'id', 'street_address',
53 'Database check for created address.'
54 );
55
56 // Now call add() to modify an existing address
57
9099cab3
CW
58 $params = [];
59 $params['address']['1'] = [
6a488035
TO
60 'id' => $addressId,
61 'street_address' => '120 Terminal Road',
62 'supplemental_address_1' => 'A-wing:3037',
63 'supplemental_address_2' => 'Bandra',
207f62c6 64 'supplemental_address_3' => 'Somewhere',
6a488035
TO
65 'city' => 'Athens',
66 'postal_code' => '01903',
67 'state_province_id' => '1000',
68 'country_id' => '1228',
69 'geo_code_1' => '18.219023',
70 'geo_code_2' => '-105.00973',
71 'location_type_id' => '1',
72 'is_primary' => '1',
73 'is_billing' => '0',
9099cab3 74 ];
6a488035
TO
75 $params['contact_id'] = $contactId;
76
6a488035
TO
77 $block = CRM_Core_BAO_Address::create($params, $fixAddress, $entity = NULL);
78
93ac19cd 79 $this->assertDBNotNull('CRM_Core_DAO_Address', $contactId, 'id', 'contact_id',
6a488035
TO
80 'Database check for updated address by contactId.'
81 );
93ac19cd 82 $this->assertDBNotNull('CRM_Core_DAO_Address', '120 Terminal Road', 'id', 'street_address',
6a488035
TO
83 'Database check for updated address by street_name.'
84 );
93ac19cd 85 $this->contactDelete($contactId);
6a488035
TO
86 }
87
88 /**
89 * Add() method ( )
90 */
00be9182 91 public function testAdd() {
f2040bc6 92 $contactId = $this->individualCreate();
6a488035 93
9099cab3 94 $fixParams = [
6a488035
TO
95 'street_address' => 'E 906N Pine Pl W',
96 'supplemental_address_1' => 'Editorial Dept',
97 'supplemental_address_2' => '',
207f62c6 98 'supplemental_address_3' => '',
6a488035
TO
99 'city' => 'El Paso',
100 'postal_code' => '88575',
101 'postal_code_suffix' => '',
102 'state_province_id' => '1001',
103 'country_id' => '1228',
104 'geo_code_1' => '31.694842',
105 'geo_code_2' => '-106.29998',
106 'location_type_id' => '1',
107 'is_primary' => '1',
108 'is_billing' => '0',
109 'contact_id' => $contactId,
9099cab3 110 ];
6a488035
TO
111
112 $addAddress = CRM_Core_BAO_Address::add($fixParams, $fixAddress = TRUE);
113
114 $addParams = $this->assertDBNotNull('CRM_Core_DAO_Address', $contactId, 'id', 'contact_id',
115 'Database check for created contact address.'
116 );
117
118 $this->assertEquals($addAddress->street_address, 'E 906N Pine Pl W', 'In line' . __LINE__);
119 $this->assertEquals($addAddress->supplemental_address_1, 'Editorial Dept', 'In line' . __LINE__);
120 $this->assertEquals($addAddress->city, 'El Paso', 'In line' . __LINE__);
121 $this->assertEquals($addAddress->postal_code, '88575', 'In line' . __LINE__);
122 $this->assertEquals($addAddress->geo_code_1, '31.694842', 'In line' . __LINE__);
123 $this->assertEquals($addAddress->geo_code_2, '-106.29998', 'In line' . __LINE__);
124 $this->assertEquals($addAddress->country_id, '1228', 'In line' . __LINE__);
93ac19cd 125 $this->contactDelete($contactId);
6a488035
TO
126 }
127
128 /**
129 * AllAddress() method ( )
130 */
00be9182 131 public function testallAddress() {
f2040bc6 132 $contactId = $this->individualCreate();
6a488035 133
9099cab3 134 $fixParams = [
6a488035
TO
135 'street_address' => 'E 906N Pine Pl W',
136 'supplemental_address_1' => 'Editorial Dept',
137 'supplemental_address_2' => '',
207f62c6 138 'supplemental_address_3' => '',
6a488035
TO
139 'city' => 'El Paso',
140 'postal_code' => '88575',
141 'postal_code_suffix' => '',
142 'state_province_id' => '1001',
143 'country_id' => '1228',
144 'geo_code_1' => '31.694842',
145 'geo_code_2' => '-106.29998',
146 'location_type_id' => '1',
147 'is_primary' => '1',
148 'is_billing' => '0',
149 'contact_id' => $contactId,
9099cab3 150 ];
6a488035
TO
151
152 CRM_Core_BAO_Address::add($fixParams, $fixAddress = TRUE);
153
154 $addParams = $this->assertDBNotNull('CRM_Core_DAO_Address', $contactId, 'id', 'contact_id',
155 'Database check for created contact address.'
156 );
9099cab3 157 $fixParams = [
6a488035
TO
158 'street_address' => 'SW 719B Beech Dr NW',
159 'supplemental_address_1' => 'C/o OPDC',
160 'supplemental_address_2' => '',
207f62c6 161 'supplemental_address_3' => '',
6a488035
TO
162 'city' => 'Neillsville',
163 'postal_code' => '54456',
164 'postal_code_suffix' => '',
165 'state_province_id' => '1001',
166 'country_id' => '1228',
167 'geo_code_1' => '44.553719',
168 'geo_code_2' => '-90.61457',
169 'location_type_id' => '2',
170 'is_primary' => '',
171 'is_billing' => '1',
172 'contact_id' => $contactId,
9099cab3 173 ];
6a488035
TO
174
175 CRM_Core_BAO_Address::add($fixParams, $fixAddress = TRUE);
176
177 $addParams = $this->assertDBNotNull('CRM_Core_DAO_Address', $contactId, 'id', 'contact_id',
178 'Database check for created contact address.'
179 );
180
181 $allAddress = CRM_Core_BAO_Address::allAddress($contactId);
182
183 $this->assertEquals(count($allAddress), 2, 'Checking number of returned addresses.');
184
93ac19cd 185 $this->contactDelete($contactId);
6a488035
TO
186 }
187
188 /**
189 * AllAddress() method ( ) with null value
190 */
00be9182 191 public function testnullallAddress() {
f2040bc6 192 $contactId = $this->individualCreate();
6a488035 193
9099cab3 194 $fixParams = [
6a488035
TO
195 'street_address' => 'E 906N Pine Pl W',
196 'supplemental_address_1' => 'Editorial Dept',
197 'supplemental_address_2' => '',
207f62c6 198 'supplemental_address_3' => '',
6a488035
TO
199 'city' => 'El Paso',
200 'postal_code' => '88575',
201 'postal_code_suffix' => '',
202 'state_province_id' => '1001',
203 'country_id' => '1228',
204 'geo_code_1' => '31.694842',
205 'geo_code_2' => '-106.29998',
206 'location_type_id' => '1',
207 'is_primary' => '1',
208 'is_billing' => '0',
209 'contact_id' => $contactId,
9099cab3 210 ];
6a488035
TO
211
212 CRM_Core_BAO_Address::add($fixParams, $fixAddress = TRUE);
213
214 $addParams = $this->assertDBNotNull('CRM_Core_DAO_Address', $contactId, 'id', 'contact_id',
215 'Database check for created contact address.'
216 );
217
218 $contact_Id = NULL;
219
220 $allAddress = CRM_Core_BAO_Address::allAddress($contact_Id);
221
222 $this->assertEquals($allAddress, NULL, 'Checking null for returned addresses.');
223
93ac19cd 224 $this->contactDelete($contactId);
6a488035
TO
225 }
226
227 /**
100fef9d 228 * GetValues() method (get Address fields)
6a488035 229 */
00be9182 230 public function testGetValues() {
f2040bc6 231 $contactId = $this->individualCreate();
6a488035 232
9099cab3
CW
233 $params = [];
234 $params['address']['1'] = [
6a488035
TO
235 'street_address' => 'Oberoi Garden',
236 'supplemental_address_1' => 'Attn: Accounting',
237 'supplemental_address_2' => 'Powai',
207f62c6 238 'supplemental_address_3' => 'Somewhere',
6a488035
TO
239 'city' => 'Athens',
240 'postal_code' => '01903',
241 'state_province_id' => '1000',
242 'country_id' => '1228',
243 'geo_code_1' => '18.219023',
244 'geo_code_2' => '-105.00973',
245 'location_type_id' => '1',
246 'is_primary' => '1',
247 'is_billing' => '0',
9099cab3 248 ];
6a488035
TO
249
250 $params['contact_id'] = $contactId;
251
252 $fixAddress = TRUE;
253
254 CRM_Core_BAO_Address::create($params, $fixAddress, $entity = NULL);
255
256 $addressId = $this->assertDBNotNull('CRM_Core_DAO_Address', $contactId, 'id', 'contact_id',
257 'Database check for created address.'
258 );
259
9099cab3 260 $entityBlock = ['contact_id' => $contactId];
6a488035
TO
261 $address = CRM_Core_BAO_Address::getValues($entityBlock);
262 $this->assertEquals($address[1]['id'], $addressId);
263 $this->assertEquals($address[1]['contact_id'], $contactId);
66bc5236
ML
264 $this->assertEquals($address[1]['state_province_abbreviation'], 'AL');
265 $this->assertEquals($address[1]['state_province'], 'Alabama');
266 $this->assertEquals($address[1]['country'], 'United States');
6a488035 267 $this->assertEquals($address[1]['street_address'], 'Oberoi Garden');
93ac19cd 268 $this->contactDelete($contactId);
6a488035
TO
269 }
270
2b2b4087 271 /**
272 * Enable street address parsing.
273 *
274 * @param string $status
275 *
276 * @throws \CRM_Core_Exception
277 */
e6f202ae 278 public function setStreetAddressParsing($status) {
2b2b4087 279 $options = $this->callAPISuccess('Setting', 'getoptions', ['field' => 'address_options'])['values'];
280 $address_options = reset($this->callAPISuccess('Setting', 'get', ['return' => 'address_options'])['values'])['address_options'];
281 $parsingOption = array_search('Street Address Parsing', $options, TRUE);
282 $optionKey = array_search($parsingOption, $address_options, FALSE);
283 if ($status && !$optionKey) {
284 $address_options[] = $parsingOption;
e6f202ae 285 }
2b2b4087 286 if (!$status && $optionKey) {
287 unset($address_options[$optionKey]);
e6f202ae 288 }
2b2b4087 289 $this->callAPISuccess('Setting', 'create', ['address_options' => $address_options]);
e6f202ae
JM
290 }
291
292 /**
293 * ParseStreetAddress if enabled, otherwise, don't.
2b2b4087 294 *
295 * @throws \CRM_Core_Exception
296 * @throws \CiviCRM_API3_Exception
e6f202ae
JM
297 */
298 public function testParseStreetAddressIfEnabled() {
299 // Turn off address standardization. Parsing should work without it.
300 Civi::settings()->set('address_standardization_provider', NULL);
301
302 // Ensure street parsing happens if enabled.
303 $this->setStreetAddressParsing(TRUE);
304
305 $contactId = $this->individualCreate();
2b2b4087 306 $street_address = '54 Excelsior Ave.';
9099cab3 307 $params = [
e6f202ae
JM
308 'contact_id' => $contactId,
309 'street_address' => $street_address,
310 'location_type_id' => 1,
9099cab3 311 ];
e6f202ae
JM
312
313 $result = civicrm_api3('Address', 'create', $params);
314 $value = array_pop($result['values']);
849ac823 315 $street_number = $value['street_number'] ?? NULL;
e6f202ae
JM
316 $this->assertEquals($street_number, '54');
317
318 // Ensure street parsing does not happen if disabled.
319 $this->setStreetAddressParsing(FALSE);
320 $result = civicrm_api3('Address', 'create', $params);
321 $value = array_pop($result['values']);
849ac823 322 $street_number = $value['street_number'] ?? NULL;
e6f202ae
JM
323 $this->assertEmpty($street_number);
324
325 }
326
6a488035 327 /**
100fef9d 328 * ParseStreetAddress() method (get street address parsed)
6a488035 329 */
00be9182 330 public function testParseStreetAddress() {
6a488035
TO
331
332 // valid Street address to be parsed ( without locale )
333 $street_address = "54A Excelsior Ave. Apt 1C";
334 $parsedStreetAddress = CRM_Core_BAO_Address::parseStreetAddress($street_address);
335 $this->assertEquals($parsedStreetAddress['street_name'], 'Excelsior Ave.');
336 $this->assertEquals($parsedStreetAddress['street_unit'], 'Apt 1C');
337 $this->assertEquals($parsedStreetAddress['street_number'], '54');
338 $this->assertEquals($parsedStreetAddress['street_number_suffix'], 'A');
339
eb072300 340 // Out-of-range street number to be parsed.
2b2b4087 341 $street_address = '505050505050 Main St';
eb072300 342 $parsedStreetAddress = CRM_Core_BAO_Address::parseStreetAddress($street_address);
343 $this->assertEquals($parsedStreetAddress['street_name'], '');
344 $this->assertEquals($parsedStreetAddress['street_unit'], '');
345 $this->assertEquals($parsedStreetAddress['street_number'], '');
346 $this->assertEquals($parsedStreetAddress['street_number_suffix'], '');
347
6a488035 348 // valid Street address to be parsed ( $locale = 'en_US' )
92915c55
TO
349 $street_address = "54A Excelsior Ave. Apt 1C";
350 $locale = 'en_US';
6a488035
TO
351 $parsedStreetAddress = CRM_Core_BAO_Address::parseStreetAddress($street_address, $locale);
352 $this->assertEquals($parsedStreetAddress['street_name'], 'Excelsior Ave.');
353 $this->assertEquals($parsedStreetAddress['street_unit'], 'Apt 1C');
354 $this->assertEquals($parsedStreetAddress['street_number'], '54');
355 $this->assertEquals($parsedStreetAddress['street_number_suffix'], 'A');
356
357 // invalid Street address ( $locale = 'en_US' )
92915c55
TO
358 $street_address = "West St. Apt 1";
359 $locale = 'en_US';
6a488035
TO
360 $parsedStreetAddress = CRM_Core_BAO_Address::parseStreetAddress($street_address, $locale);
361 $this->assertEquals($parsedStreetAddress['street_name'], 'West St.');
362 $this->assertEquals($parsedStreetAddress['street_unit'], 'Apt 1');
363 $this->assertNotContains('street_number', $parsedStreetAddress);
364 $this->assertNotContains('street_number_suffix', $parsedStreetAddress);
365
366 // valid Street address to be parsed ( $locale = 'fr_CA' )
92915c55
TO
367 $street_address = "2-123CA Main St";
368 $locale = 'fr_CA';
6a488035
TO
369 $parsedStreetAddress = CRM_Core_BAO_Address::parseStreetAddress($street_address, $locale);
370 $this->assertEquals($parsedStreetAddress['street_name'], 'Main St');
371 $this->assertEquals($parsedStreetAddress['street_unit'], '2');
372 $this->assertEquals($parsedStreetAddress['street_number'], '123');
373 $this->assertEquals($parsedStreetAddress['street_number_suffix'], 'CA');
374
375 // invalid Street address ( $locale = 'fr_CA' )
92915c55
TO
376 $street_address = "123 Main St";
377 $locale = 'fr_CA';
6a488035
TO
378 $parsedStreetAddress = CRM_Core_BAO_Address::parseStreetAddress($street_address, $locale);
379 $this->assertEquals($parsedStreetAddress['street_name'], 'Main St');
380 $this->assertEquals($parsedStreetAddress['street_number'], '123');
381 $this->assertNotContains('street_unit', $parsedStreetAddress);
382 $this->assertNotContains('street_number_suffix', $parsedStreetAddress);
383 }
96025800 384
1d148cb9
O
385 /**
386 * @dataProvider supportedAddressParsingLocales
387 */
388 public function testIsSupportedByAddressParsingReturnTrueForSupportedLocales($locale) {
389 $isSupported = CRM_Core_BAO_Address::isSupportedParsingLocale($locale);
390 $this->assertTrue($isSupported);
391 }
392
393 /**
394 * @dataProvider supportedAddressParsingLocales
395 */
396 public function testIsSupportedByAddressParsingReturnTrueForSupportedDefaultLocales($locale) {
397 CRM_Core_Config::singleton()->lcMessages = $locale;
398 $isSupported = CRM_Core_BAO_Address::isSupportedParsingLocale();
399 $this->assertTrue($isSupported);
400
401 }
402
9a208ac3 403 public function supportedAddressParsingLocales() {
9099cab3
CW
404 return [
405 ['en_US'],
406 ['en_CA'],
407 ['fr_CA'],
408 ];
1d148cb9
O
409 }
410
411 /**
412 * @dataProvider sampleOFUnsupportedAddressParsingLocales
413 */
414 public function testIsSupportedByAddressParsingReturnFalseForUnSupportedLocales($locale) {
415 $isNotSupported = CRM_Core_BAO_Address::isSupportedParsingLocale($locale);
416 $this->assertFalse($isNotSupported);
417 }
418
419 /**
420 * @dataProvider sampleOFUnsupportedAddressParsingLocales
421 */
422 public function testIsSupportedByAddressParsingReturnFalseForUnSupportedDefaultLocales($locale) {
423 CRM_Core_Config::singleton()->lcMessages = $locale;
424 $isNotSupported = CRM_Core_BAO_Address::isSupportedParsingLocale();
425 $this->assertFalse($isNotSupported);
426 }
427
9a208ac3 428 public function sampleOFUnsupportedAddressParsingLocales() {
9099cab3
CW
429 return [
430 ['en_GB'],
431 ['af_ZA'],
432 ['da_DK'],
433 ];
1d148cb9
O
434 }
435
4d5f5c22
D
436 /**
437 * CRM-21214 - Ensure all child addresses are updated correctly - 1.
438 * 1. First, create three contacts: A, B, and C
439 * 2. Create an address for contact A
440 * 3. Use contact A's address for contact B
441 * 4. Use contact B's address for contact C
442 * 5. Change contact A's address
443 * Address of Contact C should reflect contact A's address change
444 * Also, Contact C's address' master_id should be Contact A's address id.
445 */
446 public function testSharedAddressChaining1() {
9099cab3
CW
447 $contactIdA = $this->individualCreate([], 0);
448 $contactIdB = $this->individualCreate([], 1);
449 $contactIdC = $this->individualCreate([], 2);
4d5f5c22 450
9099cab3 451 $addressParamsA = [
4d5f5c22
D
452 'street_address' => '123 Fake St.',
453 'location_type_id' => '1',
454 'is_primary' => '1',
455 'contact_id' => $contactIdA,
9099cab3 456 ];
4d5f5c22
D
457 $addAddressA = CRM_Core_BAO_Address::add($addressParamsA, FALSE);
458
9099cab3 459 $addressParamsB = [
4d5f5c22
D
460 'street_address' => '123 Fake St.',
461 'location_type_id' => '1',
462 'is_primary' => '1',
463 'master_id' => $addAddressA->id,
464 'contact_id' => $contactIdB,
9099cab3 465 ];
4d5f5c22
D
466 $addAddressB = CRM_Core_BAO_Address::add($addressParamsB, FALSE);
467
9099cab3 468 $addressParamsC = [
4d5f5c22
D
469 'street_address' => '123 Fake St.',
470 'location_type_id' => '1',
471 'is_primary' => '1',
472 'master_id' => $addAddressB->id,
473 'contact_id' => $contactIdC,
9099cab3 474 ];
4d5f5c22
D
475 $addAddressC = CRM_Core_BAO_Address::add($addressParamsC, FALSE);
476
9099cab3 477 $updatedAddressParamsA = [
4d5f5c22
D
478 'id' => $addAddressA->id,
479 'street_address' => '1313 New Address Lane',
480 'location_type_id' => '1',
481 'is_primary' => '1',
482 'contact_id' => $contactIdA,
9099cab3 483 ];
4d5f5c22
D
484 $updatedAddressA = CRM_Core_BAO_Address::add($updatedAddressParamsA, FALSE);
485
486 // CRM-21214 - Has Address C been updated with Address A's new values?
487 $newAddressC = new CRM_Core_DAO_Address();
488 $newAddressC->id = $addAddressC->id;
489 $newAddressC->find(TRUE);
490 $newAddressC->fetch(TRUE);
491
492 $this->assertEquals($updatedAddressA->street_address, $newAddressC->street_address);
493 $this->assertEquals($updatedAddressA->id, $newAddressC->master_id);
494 }
495
496 /**
497 * CRM-21214 - Ensure all child addresses are updated correctly - 2.
498 * 1. First, create three contacts: A, B, and C
499 * 2. Create an address for contact A and B
500 * 3. Use contact A's address for contact C
501 * 4. Use contact B's address for contact A
502 * 5. Change contact B's address
503 * Address of Contact C should reflect contact B's address change
504 * Also, Contact C's address' master_id should be Contact B's address id.
505 */
506 public function testSharedAddressChaining2() {
9099cab3
CW
507 $contactIdA = $this->individualCreate([], 0);
508 $contactIdB = $this->individualCreate([], 1);
509 $contactIdC = $this->individualCreate([], 2);
4d5f5c22 510
9099cab3 511 $addressParamsA = [
4d5f5c22
D
512 'street_address' => '123 Fake St.',
513 'location_type_id' => '1',
514 'is_primary' => '1',
515 'contact_id' => $contactIdA,
9099cab3 516 ];
4d5f5c22
D
517 $addAddressA = CRM_Core_BAO_Address::add($addressParamsA, FALSE);
518
9099cab3 519 $addressParamsB = [
4d5f5c22
D
520 'street_address' => '123 Fake St.',
521 'location_type_id' => '1',
522 'is_primary' => '1',
523 'contact_id' => $contactIdB,
9099cab3 524 ];
4d5f5c22
D
525 $addAddressB = CRM_Core_BAO_Address::add($addressParamsB, FALSE);
526
9099cab3 527 $addressParamsC = [
4d5f5c22
D
528 'street_address' => '123 Fake St.',
529 'location_type_id' => '1',
530 'is_primary' => '1',
531 'master_id' => $addAddressA->id,
532 'contact_id' => $contactIdC,
9099cab3 533 ];
4d5f5c22
D
534 $addAddressC = CRM_Core_BAO_Address::add($addressParamsC, FALSE);
535
9099cab3 536 $updatedAddressParamsA = [
4d5f5c22
D
537 'id' => $addAddressA->id,
538 'street_address' => '123 Fake St.',
539 'location_type_id' => '1',
540 'is_primary' => '1',
541 'master_id' => $addAddressB->id,
542 'contact_id' => $contactIdA,
9099cab3 543 ];
4d5f5c22
D
544 $updatedAddressA = CRM_Core_BAO_Address::add($updatedAddressParamsA, FALSE);
545
9099cab3 546 $updatedAddressParamsB = [
4d5f5c22
D
547 'id' => $addAddressB->id,
548 'street_address' => '1313 New Address Lane',
549 'location_type_id' => '1',
550 'is_primary' => '1',
551 'contact_id' => $contactIdB,
9099cab3 552 ];
4d5f5c22
D
553 $updatedAddressB = CRM_Core_BAO_Address::add($updatedAddressParamsB, FALSE);
554
555 // CRM-21214 - Has Address C been updated with Address B's new values?
556 $newAddressC = new CRM_Core_DAO_Address();
557 $newAddressC->id = $addAddressC->id;
558 $newAddressC->find(TRUE);
559 $newAddressC->fetch(TRUE);
560
561 $this->assertEquals($updatedAddressB->street_address, $newAddressC->street_address);
562 $this->assertEquals($updatedAddressB->id, $newAddressC->master_id);
563 }
564
565 /**
566 * CRM-21214 - Ensure all child addresses are updated correctly - 3.
567 * 1. First, create a contact: A
568 * 2. Create an address for contact A
569 * 3. Use contact A's address for contact A's address
570 * An error should be given, and master_id should remain the same.
571 */
572 public function testSharedAddressChaining3() {
9099cab3 573 $contactIdA = $this->individualCreate([], 0);
4d5f5c22 574
9099cab3 575 $addressParamsA = [
4d5f5c22
D
576 'street_address' => '123 Fake St.',
577 'location_type_id' => '1',
578 'is_primary' => '1',
579 'contact_id' => $contactIdA,
9099cab3 580 ];
4d5f5c22
D
581 $addAddressA = CRM_Core_BAO_Address::add($addressParamsA, FALSE);
582
9099cab3 583 $updatedAddressParamsA = [
4d5f5c22
D
584 'id' => $addAddressA->id,
585 'street_address' => '123 Fake St.',
586 'location_type_id' => '1',
587 'is_primary' => '1',
588 'master_id' => $addAddressA->id,
589 'contact_id' => $contactIdA,
9099cab3 590 ];
4d5f5c22
D
591 $updatedAddressA = CRM_Core_BAO_Address::add($updatedAddressParamsA, FALSE);
592
593 // CRM-21214 - AdressA shouldn't be master of itself.
93eadfba 594 $this->assertEmpty($updatedAddressA->master_id);
4d5f5c22
D
595 }
596
6a488035 597}