1414
1515use Geocoder \Exception \InvalidServerResponse ;
1616use Geocoder \IntegrationTest \BaseTestCase ;
17- use Geocoder \Location ;
1817use Geocoder \Model \Address ;
1918use Geocoder \Model \AddressCollection ;
2019use Geocoder \Provider \GoogleMaps \Model \GoogleAddress ;
@@ -94,7 +93,7 @@ public function testGeocodeWithRealAddress()
9493 $ this ->assertInstanceOf (AddressCollection::class, $ results );
9594 $ this ->assertCount (1 , $ results );
9695
97- /** @var Location $result */
96+ /** @var GoogleAddress $result */
9897 $ result = $ results ->first ();
9998 $ this ->assertInstanceOf (Address::class, $ result );
10099 $ this ->assertEqualsWithDelta (48.8630462 , $ result ->getCoordinates ()->getLatitude (), 0.001 );
@@ -128,7 +127,7 @@ public function testGeocodeBoundsWithRealAddressForNonRooftopLocation()
128127 $ this ->assertInstanceOf (AddressCollection::class, $ results );
129128 $ this ->assertCount (1 , $ results );
130129
131- /** @var Location $result */
130+ /** @var GoogleAddress $result */
132131 $ result = $ results ->first ();
133132 $ this ->assertInstanceOf (Address::class, $ result );
134133 $ this ->assertNotNull ($ result ->getBounds ());
@@ -156,7 +155,7 @@ public function testReverseWithRealCoordinates()
156155 $ this ->assertInstanceOf (AddressCollection::class, $ results );
157156 $ this ->assertCount (5 , $ results );
158157
159- /** @var Location $result */
158+ /** @var GoogleAddress $result */
160159 $ result = $ results ->first ();
161160 $ this ->assertInstanceOf (Address::class, $ result );
162161 $ this ->assertEquals (12 , $ result ->getStreetNumber ());
@@ -180,7 +179,7 @@ public function testReverseWithRealCoordinatesAndLocale()
180179 $ this ->assertInstanceOf (AddressCollection::class, $ results );
181180 $ this ->assertCount (5 , $ results );
182181
183- /** @var Location $result */
182+ /** @var GoogleAddress $result */
184183 $ result = $ results ->first ();
185184 $ this ->assertInstanceOf (Address::class, $ result );
186185 $ this ->assertEquals (12 , $ result ->getStreetNumber ());
@@ -204,7 +203,7 @@ public function testGeocodeWithCityDistrict()
204203 $ this ->assertInstanceOf (AddressCollection::class, $ results );
205204 $ this ->assertCount (1 , $ results );
206205
207- /** @var Location $result */
206+ /** @var GoogleAddress $result */
208207 $ result = $ results ->first ();
209208 $ this ->assertInstanceOf (Address::class, $ result );
210209 $ this ->assertEquals ('Kalbach-Riedberg ' , $ result ->getSubLocality ());
@@ -228,7 +227,7 @@ public function testGeocodeWithRealValidApiKey()
228227 $ this ->assertInstanceOf (AddressCollection::class, $ results );
229228 $ this ->assertCount (1 , $ results );
230229
231- /** @var Location $result */
230+ /** @var GoogleAddress $result */
232231 $ result = $ results ->first ();
233232 $ this ->assertInstanceOf (Address::class, $ result );
234233 $ this ->assertNotNull ($ result ->getCoordinates ()->getLatitude ());
@@ -251,7 +250,7 @@ public function testGeocodeWithComponentFiltering()
251250 $ this ->assertInstanceOf (AddressCollection::class, $ results );
252251 $ this ->assertCount (1 , $ results );
253252
254- /** @var Location $result */
253+ /** @var GoogleAddress $result */
255254 $ result = $ results ->first ();
256255 $ this ->assertInstanceOf (Address::class, $ result );
257256 $ this ->assertEquals ('Malmö ' , $ result ->getLocality ());
@@ -340,7 +339,7 @@ public function testGeocodePostalTown()
340339 $ this ->assertInstanceOf (AddressCollection::class, $ results );
341340 $ this ->assertCount (1 , $ results );
342341
343- /** @var Location $result */
342+ /** @var GoogleAddress $result */
344343 $ result = $ results ->first ();
345344 $ this ->assertInstanceOf (Address::class, $ result );
346345 $ this ->assertEquals ('Pontypridd ' , $ result ->getLocality ());
@@ -558,7 +557,7 @@ public function testGeocodeBoundsWithRealAddressWithViewportOnly()
558557 $ this ->assertInstanceOf (AddressCollection::class, $ results );
559558 $ this ->assertCount (1 , $ results );
560559
561- /** @var \Geocoder\Model\Address $result */
560+ /** @var GoogleAddress $result */
562561 $ result = $ results ->first ();
563562 $ this ->assertInstanceOf (Address::class, $ result );
564563 $ this ->assertNotNull ($ result ->getBounds ());
@@ -569,6 +568,28 @@ public function testGeocodeBoundsWithRealAddressWithViewportOnly()
569568 $ this ->assertEquals (false , $ result ->isPartialMatch ());
570569 }
571570
571+ public function testGeocodeDuplicateSubLocalityLevel ()
572+ {
573+ $ provider = $ this ->getGoogleMapsProvider ();
574+ $ results = $ provider ->geocodeQuery (GeocodeQuery::create ('Rue de Pont-A-Migneloux, 6210 Wayaux, Belgique ' ));
575+
576+ $ this ->assertInstanceOf (AddressCollection::class, $ results );
577+ $ this ->assertCount (1 , $ results );
578+
579+ /** @var GoogleAddress $result */
580+ $ result = $ results ->first ();
581+ $ this ->assertInstanceOf (Address::class, $ result );
582+ $ this ->assertEquals ('Rue de Pont-à-Migneloux, 6210 Les Bons Villers, Belgium ' , $ result ->getFormattedAddress ());
583+ $ this ->assertEquals ('Les Bons Villers ' , $ result ->getSubLocality ());
584+ $ this ->assertCount (2 , $ result ->getAdminLevels ());
585+ $ this ->assertEquals ('Région Wallonne ' , $ result ->getAdminLevels ()->get (1 )->getName ());
586+ $ this ->assertEquals ('Hainaut ' , $ result ->getAdminLevels ()->get (2 )->getName ());
587+ $ this ->assertInstanceOf ('\Geocoder\Model\AdminLevelCollection ' , $ result ->getSubLocalityLevels ());
588+ $ this ->assertEquals (1 , $ result ->getSubLocalityLevels ()->get (1 )->getLevel ());
589+ $ this ->assertEquals ('Wayaux / Les Bons Villers ' , $ result ->getSubLocalityLevels ()->get (1 )->getName ());
590+ $ this ->assertEquals ('Wayaux / Les Bons Villers ' , $ result ->getSubLocalityLevels ()->get (1 )->getCode ());
591+ }
592+
572593 private function getGoogleMapsProvider (): GoogleMaps
573594 {
574595 if (!isset ($ _SERVER ['GOOGLE_GEOCODING_KEY ' ])) {
0 commit comments