Ian province abbreviation patch - issue 724
[civicrm-core.git] / tests / phpunit / CRM / Core / BAO / AddressTest.php
1 <?php
2 /*
3 +--------------------------------------------------------------------+
4 | CiviCRM version 4.7 |
5 +--------------------------------------------------------------------+
6 | Copyright CiviCRM LLC (c) 2004-2015 |
7 +--------------------------------------------------------------------+
8 | This file is a part of CiviCRM. |
9 | |
10 | CiviCRM is free software; you can copy, modify, and distribute it |
11 | under the terms of the GNU Affero General Public License |
12 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
13 | |
14 | CiviCRM is distributed in the hope that it will be useful, but |
15 | WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
17 | See the GNU Affero General Public License for more details. |
18 | |
19 | You should have received a copy of the GNU Affero General Public |
20 | License and the CiviCRM Licensing Exception along |
21 | with this program; if not, contact CiviCRM LLC |
22 | at info[AT]civicrm[DOT]org. If you have questions about the |
23 | GNU Affero General Public License or the licensing of CiviCRM, |
24 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
25 +--------------------------------------------------------------------+
26 */
27
28
29 require_once 'CiviTest/CiviUnitTestCase.php';
30 require_once 'CiviTest/Contact.php';
31
32 /**
33 * Class CRM_Core_BAO_AddressTest
34 */
35 class CRM_Core_BAO_AddressTest extends CiviUnitTestCase {
36 public function setUp() {
37 parent::setUp();
38
39 $this->quickCleanup(array('civicrm_contact', 'civicrm_address'));
40 }
41
42 /**
43 * Create() method (create and update modes)
44 */
45 public function testCreate() {
46 $contactId = Contact::createIndividual();
47
48 $params = array();
49 $params['address']['1'] = array(
50 'street_address' => 'Oberoi Garden',
51 'supplemental_address_1' => 'Attn: Accounting',
52 'supplemental_address_2' => 'Powai',
53 'city' => 'Athens',
54 'postal_code' => '01903',
55 'state_province_id' => '1000',
56 'country_id' => '1228',
57 'geo_code_1' => '18.219023',
58 'geo_code_2' => '-105.00973',
59 'location_type_id' => '1',
60 'is_primary' => '1',
61 'is_billing' => '0',
62 );
63
64 $params['contact_id'] = $contactId;
65
66 $fixAddress = TRUE;
67
68 CRM_Core_BAO_Address::create($params, $fixAddress, $entity = NULL);
69 $addressId = $this->assertDBNotNull('CRM_Core_DAO_Address', 'Oberoi Garden', 'id', 'street_address',
70 'Database check for created address.'
71 );
72
73 // Now call add() to modify an existing address
74
75 $params = array();
76 $params['address']['1'] = array(
77 'id' => $addressId,
78 'street_address' => '120 Terminal Road',
79 'supplemental_address_1' => 'A-wing:3037',
80 'supplemental_address_2' => 'Bandra',
81 'city' => 'Athens',
82 'postal_code' => '01903',
83 'state_province_id' => '1000',
84 'country_id' => '1228',
85 'geo_code_1' => '18.219023',
86 'geo_code_2' => '-105.00973',
87 'location_type_id' => '1',
88 'is_primary' => '1',
89 'is_billing' => '0',
90 );
91 $params['contact_id'] = $contactId;
92
93 $block = CRM_Core_BAO_Address::create($params, $fixAddress, $entity = NULL);
94
95 $cid = $this->assertDBNotNull('CRM_Core_DAO_Address', $contactId, 'id', 'contact_id',
96 'Database check for updated address by contactId.'
97 );
98 $addressId = $this->assertDBNotNull('CRM_Core_DAO_Address', '120 Terminal Road', 'id', 'street_address',
99 'Database check for updated address by street_name.'
100 );
101 Contact::delete($contactId);
102 }
103
104 /**
105 * Add() method ( )
106 */
107 public function testAdd() {
108 $contactId = Contact::createIndividual();
109
110 $fixParams = array(
111 'street_address' => 'E 906N Pine Pl W',
112 'supplemental_address_1' => 'Editorial Dept',
113 'supplemental_address_2' => '',
114 'city' => 'El Paso',
115 'postal_code' => '88575',
116 'postal_code_suffix' => '',
117 'state_province_id' => '1001',
118 'country_id' => '1228',
119 'geo_code_1' => '31.694842',
120 'geo_code_2' => '-106.29998',
121 'location_type_id' => '1',
122 'is_primary' => '1',
123 'is_billing' => '0',
124 'contact_id' => $contactId,
125 );
126
127 $addAddress = CRM_Core_BAO_Address::add($fixParams, $fixAddress = TRUE);
128
129 $addParams = $this->assertDBNotNull('CRM_Core_DAO_Address', $contactId, 'id', 'contact_id',
130 'Database check for created contact address.'
131 );
132
133 $this->assertEquals($addAddress->street_address, 'E 906N Pine Pl W', 'In line' . __LINE__);
134 $this->assertEquals($addAddress->supplemental_address_1, 'Editorial Dept', 'In line' . __LINE__);
135 $this->assertEquals($addAddress->city, 'El Paso', 'In line' . __LINE__);
136 $this->assertEquals($addAddress->postal_code, '88575', 'In line' . __LINE__);
137 $this->assertEquals($addAddress->geo_code_1, '31.694842', 'In line' . __LINE__);
138 $this->assertEquals($addAddress->geo_code_2, '-106.29998', 'In line' . __LINE__);
139 $this->assertEquals($addAddress->country_id, '1228', 'In line' . __LINE__);
140 Contact::delete($contactId);
141 }
142
143 /**
144 * AllAddress() method ( )
145 */
146 public function testallAddress() {
147 $contactId = Contact::createIndividual();
148
149 $fixParams = array(
150 'street_address' => 'E 906N Pine Pl W',
151 'supplemental_address_1' => 'Editorial Dept',
152 'supplemental_address_2' => '',
153 'city' => 'El Paso',
154 'postal_code' => '88575',
155 'postal_code_suffix' => '',
156 'state_province_id' => '1001',
157 'country_id' => '1228',
158 'geo_code_1' => '31.694842',
159 'geo_code_2' => '-106.29998',
160 'location_type_id' => '1',
161 'is_primary' => '1',
162 'is_billing' => '0',
163 'contact_id' => $contactId,
164 );
165
166 CRM_Core_BAO_Address::add($fixParams, $fixAddress = TRUE);
167
168 $addParams = $this->assertDBNotNull('CRM_Core_DAO_Address', $contactId, 'id', 'contact_id',
169 'Database check for created contact address.'
170 );
171 $fixParams = array(
172 'street_address' => 'SW 719B Beech Dr NW',
173 'supplemental_address_1' => 'C/o OPDC',
174 'supplemental_address_2' => '',
175 'city' => 'Neillsville',
176 'postal_code' => '54456',
177 'postal_code_suffix' => '',
178 'state_province_id' => '1001',
179 'country_id' => '1228',
180 'geo_code_1' => '44.553719',
181 'geo_code_2' => '-90.61457',
182 'location_type_id' => '2',
183 'is_primary' => '',
184 'is_billing' => '1',
185 'contact_id' => $contactId,
186 );
187
188 CRM_Core_BAO_Address::add($fixParams, $fixAddress = TRUE);
189
190 $addParams = $this->assertDBNotNull('CRM_Core_DAO_Address', $contactId, 'id', 'contact_id',
191 'Database check for created contact address.'
192 );
193
194 $allAddress = CRM_Core_BAO_Address::allAddress($contactId);
195
196 $this->assertEquals(count($allAddress), 2, 'Checking number of returned addresses.');
197
198 Contact::delete($contactId);
199 }
200
201 /**
202 * AllAddress() method ( ) with null value
203 */
204 public function testnullallAddress() {
205 $contactId = Contact::createIndividual();
206
207 $fixParams = array(
208 'street_address' => 'E 906N Pine Pl W',
209 'supplemental_address_1' => 'Editorial Dept',
210 'supplemental_address_2' => '',
211 'city' => 'El Paso',
212 'postal_code' => '88575',
213 'postal_code_suffix' => '',
214 'state_province_id' => '1001',
215 'country_id' => '1228',
216 'geo_code_1' => '31.694842',
217 'geo_code_2' => '-106.29998',
218 'location_type_id' => '1',
219 'is_primary' => '1',
220 'is_billing' => '0',
221 'contact_id' => $contactId,
222 );
223
224 CRM_Core_BAO_Address::add($fixParams, $fixAddress = TRUE);
225
226 $addParams = $this->assertDBNotNull('CRM_Core_DAO_Address', $contactId, 'id', 'contact_id',
227 'Database check for created contact address.'
228 );
229
230 $contact_Id = NULL;
231
232 $allAddress = CRM_Core_BAO_Address::allAddress($contact_Id);
233
234 $this->assertEquals($allAddress, NULL, 'Checking null for returned addresses.');
235
236 Contact::delete($contactId);
237 }
238
239 /**
240 * GetValues() method (get Address fields)
241 */
242 public function testGetValues() {
243 $contactId = Contact::createIndividual();
244
245 $params = array();
246 $params['address']['1'] = array(
247 'street_address' => 'Oberoi Garden',
248 'supplemental_address_1' => 'Attn: Accounting',
249 'supplemental_address_2' => 'Powai',
250 'city' => 'Athens',
251 'postal_code' => '01903',
252 'state_province_id' => '1000',
253 'country_id' => '1228',
254 'geo_code_1' => '18.219023',
255 'geo_code_2' => '-105.00973',
256 'location_type_id' => '1',
257 'is_primary' => '1',
258 'is_billing' => '0',
259 );
260
261 $params['contact_id'] = $contactId;
262
263 $fixAddress = TRUE;
264
265 CRM_Core_BAO_Address::create($params, $fixAddress, $entity = NULL);
266
267 $addressId = $this->assertDBNotNull('CRM_Core_DAO_Address', $contactId, 'id', 'contact_id',
268 'Database check for created address.'
269 );
270
271 $entityBlock = array('contact_id' => $contactId);
272 $address = CRM_Core_BAO_Address::getValues($entityBlock);
273 $this->assertEquals($address[1]['id'], $addressId);
274 $this->assertEquals($address[1]['contact_id'], $contactId);
275 $this->assertEquals($address[1]['street_address'], 'Oberoi Garden');
276 Contact::delete($contactId);
277 }
278
279 /**
280 * ParseStreetAddress() method (get street address parsed)
281 */
282 public function testParseStreetAddress() {
283
284 // valid Street address to be parsed ( without locale )
285 $street_address = "54A Excelsior Ave. Apt 1C";
286 $parsedStreetAddress = CRM_Core_BAO_Address::parseStreetAddress($street_address);
287 $this->assertEquals($parsedStreetAddress['street_name'], 'Excelsior Ave.');
288 $this->assertEquals($parsedStreetAddress['street_unit'], 'Apt 1C');
289 $this->assertEquals($parsedStreetAddress['street_number'], '54');
290 $this->assertEquals($parsedStreetAddress['street_number_suffix'], 'A');
291
292 // valid Street address to be parsed ( $locale = 'en_US' )
293 $street_address = "54A Excelsior Ave. Apt 1C";
294 $locale = 'en_US';
295 $parsedStreetAddress = CRM_Core_BAO_Address::parseStreetAddress($street_address, $locale);
296 $this->assertEquals($parsedStreetAddress['street_name'], 'Excelsior Ave.');
297 $this->assertEquals($parsedStreetAddress['street_unit'], 'Apt 1C');
298 $this->assertEquals($parsedStreetAddress['street_number'], '54');
299 $this->assertEquals($parsedStreetAddress['street_number_suffix'], 'A');
300
301 // invalid Street address ( $locale = 'en_US' )
302 $street_address = "West St. Apt 1";
303 $locale = 'en_US';
304 $parsedStreetAddress = CRM_Core_BAO_Address::parseStreetAddress($street_address, $locale);
305 $this->assertEquals($parsedStreetAddress['street_name'], 'West St.');
306 $this->assertEquals($parsedStreetAddress['street_unit'], 'Apt 1');
307 $this->assertNotContains('street_number', $parsedStreetAddress);
308 $this->assertNotContains('street_number_suffix', $parsedStreetAddress);
309
310 // valid Street address to be parsed ( $locale = 'fr_CA' )
311 $street_address = "2-123CA Main St";
312 $locale = 'fr_CA';
313 $parsedStreetAddress = CRM_Core_BAO_Address::parseStreetAddress($street_address, $locale);
314 $this->assertEquals($parsedStreetAddress['street_name'], 'Main St');
315 $this->assertEquals($parsedStreetAddress['street_unit'], '2');
316 $this->assertEquals($parsedStreetAddress['street_number'], '123');
317 $this->assertEquals($parsedStreetAddress['street_number_suffix'], 'CA');
318
319 // invalid Street address ( $locale = 'fr_CA' )
320 $street_address = "123 Main St";
321 $locale = 'fr_CA';
322 $parsedStreetAddress = CRM_Core_BAO_Address::parseStreetAddress($street_address, $locale);
323 $this->assertEquals($parsedStreetAddress['street_name'], 'Main St');
324 $this->assertEquals($parsedStreetAddress['street_number'], '123');
325 $this->assertNotContains('street_unit', $parsedStreetAddress);
326 $this->assertNotContains('street_number_suffix', $parsedStreetAddress);
327 }
328
329 }