Completed
Push — master ( e8ac6b...f17c86 )
by Tobias
04:02
created

ArcGISOnlineTest::testGeocodeWithLocalhostIPv4()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 3
nc 1
nop 0
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the Geocoder package.
7
 * For the full copyright and license information, please view the LICENSE
8
 * file that was distributed with this source code.
9
 *
10
 * @license    MIT License
11
 */
12
13
namespace Geocoder\Provider\ArcGISOnlineTest\Tests;
14
15
use Geocoder\Collection;
16
use Geocoder\IntegrationTest\BaseTestCase;
17
use Geocoder\Location;
18
use Geocoder\Query\GeocodeQuery;
19
use Geocoder\Query\ReverseQuery;
20
use Geocoder\Provider\ArcGISOnline\ArcGISOnline;
21
22
class ArcGISOnlineTest extends BaseTestCase
23
{
24
    protected function getCacheDir()
25
    {
26
        return __DIR__.'/.cached_responses';
27
    }
28
29
    public function testGetName()
30
    {
31
        $provider = new ArcGISOnline($this->getMockedHttpClient());
32
        $this->assertEquals('arcgis_online', $provider->getName());
33
    }
34
35
    /**
36
     * @expectedException \Geocoder\Exception\UnsupportedOperation
37
     * @expectedExceptionMessage The ArcGISOnline provider does not support IP addresses, only street addresses.
38
     */
39
    public function testGeocodeWithLocalhostIPv4()
40
    {
41
        $provider = new ArcGISOnline($this->getMockedHttpClient());
42
        $provider->geocodeQuery(GeocodeQuery::create('127.0.0.1'));
43
    }
44
45
    /**
46
     * @expectedException \Geocoder\Exception\UnsupportedOperation
47
     * @expectedExceptionMessage The ArcGISOnline provider does not support IP addresses, only street addresses.
48
     */
49
    public function testGeocodeWithLocalhostIPv6()
50
    {
51
        $provider = new ArcGISOnline($this->getMockedHttpClient());
52
        $provider->geocodeQuery(GeocodeQuery::create('::1'));
53
    }
54
55
    public function testGeocodeWithRealAddress()
56
    {
57
        $provider = new ArcGISOnline($this->getHttpClient());
58
        $results = $provider->geocodeQuery(GeocodeQuery::create('10 avenue Gambetta, Paris, France'));
59
60
        $this->assertInstanceOf('Geocoder\Model\AddressCollection', $results);
61
        $this->assertCount(5, $results);
62
63
        /** @var Location $result */
64
        $result = $results->first();
65
        $this->assertInstanceOf('\Geocoder\Model\Address', $result);
66
        $this->assertEquals(48.863279997000461, $result->getCoordinates()->getLatitude(), '', 0.0001);
67
        $this->assertEquals(2.3890199980004354, $result->getCoordinates()->getLongitude(), '', 0.0001);
68
        $this->assertEquals(10, $result->getStreetNumber());
69
        $this->assertEquals('10 Avenue Gambetta', $result->getStreetName());
70
        $this->assertEquals(75020, $result->getPostalCode());
71
        $this->assertEquals('Paris', $result->getLocality());
72
        $this->assertCount(2, $result->getAdminLevels());
73
        $this->assertEquals('Île-de-France', $result->getAdminLevels()->get(1)->getName());
74
        $this->assertEquals('Paris', $result->getAdminLevels()->get(2)->getName());
75
        $this->assertEquals('FRA', $result->getCountry()->getCode());
76
77
        $this->assertNull($result->getBounds());
78
        $this->assertNull($result->getSubLocality());
79
        $this->assertNull($result->getAdminLevels()->get(2)->getCode());
80
        $this->assertNull($result->getAdminLevels()->get(1)->getCode());
81
        $this->assertNull($result->getCountry()->getName());
82
        $this->assertNull($result->getTimezone());
83
    }
84
85
    public function testGeocodeWithInvalidAddressWithSourceCountry()
86
    {
87
        $provider = new ArcGISOnline($this->getHttpClient(), 'Denmark', true);
88
        $result = $provider->geocodeQuery(GeocodeQuery::create('10 avenue Gambetta, Paris, France'));
89
90
        $this->assertInstanceOf(Collection::class, $result);
91
        $this->assertEquals(0, $result->count());
92
    }
93
94
    public function testReverseWithRealCoordinates()
95
    {
96
        $provider = new ArcGISOnline($this->getHttpClient(), null);
97
        $results = $provider->reverseQuery(ReverseQuery::fromCoordinates(48.863279997000461, 2.3890199980004354));
98
99
        $this->assertInstanceOf('Geocoder\Model\AddressCollection', $results);
100
        $this->assertCount(1, $results);
101
102
        /** @var \Geocoder\Model\Address $result */
103
        $result = $results->first();
104
        $this->assertInstanceOf('\Geocoder\Model\Address', $result);
105
        $this->assertEquals(48.863279997000461, $result->getCoordinates()->getLatitude(), '', 0.0001);
106
        $this->assertEquals(2.3890199980004354, $result->getCoordinates()->getLongitude(), '', 0.0001);
107
        $this->assertNull($result->getStreetNumber());
108
        $this->assertEquals('3 Avenue Gambetta', $result->getStreetName());
109
        $this->assertEquals(75020, $result->getPostalCode());
110
        $this->assertEquals('Paris', $result->getLocality());
111
        $this->assertEquals('FRA', $result->getCountry()->getCode());
112
113
        $this->assertNull($result->getBounds());
114
        $this->assertNull($result->getSubLocality());
115
        $this->assertEmpty($result->getAdminLevels());
116
        $this->assertNull($result->getCountry()->getName());
117
        $this->assertNull($result->getTimezone());
118
    }
119
120
    public function testGeocodeWithCity()
121
    {
122
        $provider = new ArcGISOnline($this->getHttpClient());
123
        $results = $provider->geocodeQuery(GeocodeQuery::create('Hannover'));
124
125
        $this->assertInstanceOf('Geocoder\Model\AddressCollection', $results);
126
        $this->assertCount(5, $results);
127
128
        /** @var Location $result */
129
        $result = $results->first();
130
        $this->assertInstanceOf('\Geocoder\Model\Address', $result);
131
        $this->assertEquals(52.370518568000477, $result->getCoordinates()->getLatitude(), '', 0.0001);
132
        $this->assertEquals(9.7332166860004463, $result->getCoordinates()->getLongitude(), '', 0.0001);
133
        $this->assertNull($result->getStreetNumber());
134
        $this->assertNull($result->getStreetName());
135
        $this->assertNull($result->getPostalCode());
136
        $this->assertNull($result->getLocality());
137
        $this->assertCount(1, $result->getAdminLevels());
138
        $this->assertEquals('Niedersachsen', $result->getAdminLevels()->get(1)->getName());
139
        $this->assertEquals('DEU', $result->getCountry()->getCode());
140
141
        $this->assertNull($result->getBounds());
142
        $this->assertNull($result->getSubLocality());
143
        $this->assertNull($result->getCountry()->getName());
144
        $this->assertNull($result->getTimezone());
145
146
        /** @var Location $result */
147
        $result = $results->get(1);
148
        $this->assertInstanceOf('\Geocoder\Model\Address', $result);
149
        $this->assertEquals(47.111386795000499, $result->getCoordinates()->getLatitude(), '', 0.0001);
150
        $this->assertEquals(-101.4265391569997, $result->getCoordinates()->getLongitude(), '', 0.0001);
151
        $this->assertNull($result->getStreetName());
152
        $this->assertNull($result->getLocality());
153
        $this->assertCount(2, $result->getAdminLevels());
154
        $this->assertEquals('North Dakota', $result->getAdminLevels()->get(1)->getName());
155
        $this->assertEquals('USA', $result->getCountry()->getCode());
156
157
        /** @var Location $result */
158
        $result = $results->get(2);
159
        $this->assertInstanceOf('\Geocoder\Model\Address', $result);
160
        $this->assertEquals(39.391768472000479, $result->getCoordinates()->getLatitude(), '', 0.0001);
161
        $this->assertEquals(-77.440257128999633, $result->getCoordinates()->getLongitude(), '', 0.0001);
162
        $this->assertNull($result->getStreetName());
163
        $this->assertNull($result->getLocality());
164
        $this->assertCount(2, $result->getAdminLevels());
165
        $this->assertEquals('Maryland', $result->getAdminLevels()->get(1)->getName());
166
        $this->assertEquals('USA', $result->getCountry()->getCode());
167
168
        /** @var Location $result */
169
        $result = $results->get(3);
170
        $this->assertInstanceOf('\Geocoder\Model\Address', $result);
171
        $this->assertEquals(53.174198173, $result->getCoordinates()->getLatitude(), '', 0.0001);
172
        $this->assertEquals(8.5069383810005, $result->getCoordinates()->getLongitude(), '', 0.0001);
173
        $this->assertNull($result->getStreetName());
174
        $this->assertNull($result->getLocality());
175
        $this->assertCount(1, $result->getAdminLevels());
176
        $this->assertEquals('Niedersachsen', $result->getAdminLevels()->get(1)->getName());
177
        $this->assertEquals('DEU', $result->getCountry()->getCode());
178
179
        /** @var Location $result */
180
        $result = $results->get(4);
181
        $this->assertInstanceOf('\Geocoder\Model\Address', $result);
182
        $this->assertEquals(-26.281805980999593, $result->getCoordinates()->getLatitude(), '', 0.0001);
183
        $this->assertEquals(-48.849389793999649, $result->getCoordinates()->getLongitude(), '', 0.0001);
184
        $this->assertEquals('Rua Doutor João Colin', $result->getStreetName());
185
        $this->assertCount(2, $result->getAdminLevels());
186
        $this->assertEquals('Sul', $result->getAdminLevels()->get(1)->getName());
187
        $this->assertEquals('BRA', $result->getCountry()->getCode());
188
    }
189
190
    /**
191
     * @expectedException \Geocoder\Exception\UnsupportedOperation
192
     * @expectedExceptionMessage The ArcGISOnline provider does not support IP addresses, only street addresses.
193
     */
194
    public function testGeocodeWithRealIPv4()
195
    {
196
        $provider = new ArcGISOnline($this->getHttpClient());
197
        $provider->geocodeQuery(GeocodeQuery::create('88.188.221.14'));
198
    }
199
200
    /**
201
     * @expectedException \Geocoder\Exception\UnsupportedOperation
202
     * @expectedExceptionMessage The ArcGISOnline provider does not support IP addresses, only street addresses.
203
     */
204
    public function testGeocodeWithRealIPv6()
205
    {
206
        $provider = new ArcGISOnline($this->getHttpClient());
207
        $provider->geocodeQuery(GeocodeQuery::create('::ffff:88.188.221.14'));
208
    }
209
}
210