GeoTest::testNominatim()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 18
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 3
Bugs 0 Features 1
Metric Value
cc 1
eloc 12
nc 1
nop 0
dl 0
loc 18
rs 9.8666
c 3
b 0
f 1
1
<?php
2
3
namespace LeKoala\GeoTools\Test;
4
5
use SilverStripe\Core\Environment;
6
use SilverStripe\Dev\SapphireTest;
7
use LeKoala\GeoTools\Services\IpApi;
8
use LeKoala\GeoTools\Services\MapBox;
9
use LeKoala\GeoTools\Services\BingMaps;
10
use LeKoala\GeoTools\Services\Geocoder;
11
use LeKoala\GeoTools\Services\Nominatim;
12
use SilverStripe\Core\Injector\Injector;
13
use LeKoala\GeoTools\Services\GeocodeXyz;
14
use LeKoala\GeoTools\Services\Geolocator;
15
16
class GeoTest extends SapphireTest
17
{
18
    public function testInjector(): void
19
    {
20
        $geocoder = Injector::inst()->get(Geocoder::class);
21
        $this->assertTrue($geocoder instanceof Geocoder);
22
        $geolocator = Injector::inst()->get(Geolocator::class);
23
        $this->assertTrue($geolocator instanceof Geolocator);
24
        // It's a singleton
25
        $geolocator2 = Injector::inst()->get(Geolocator::class);
26
        $this->assertSame($geolocator, $geolocator2);
27
    }
28
29
    public function testIpApi(): void
30
    {
31
        $ip = '189.59.228.17';
32
        $service = new IpApi;
33
        $result = $service->geolocate($ip);
34
35
        $this->assertNotEmpty($result);
36
        $this->assertEquals('BR', $result->getCountry()->getCode());
37
        $this->assertEquals('-23.5558', $result->getCoordinates()->getLatitude());
38
        $this->assertEquals('01000-000', $result->getPostalCode());
39
    }
40
41
    public function testGeocodeXyz(): void
42
    {
43
        // $service = new GeocodeXyz;
44
45
        // $result = $service->reverseGeocode('41.31900', '2.07465');
46
        // $this->assertNotEmpty($result);
47
        // $this->assertEquals('ES', $result->getCountry()->getCode());
48
        // $this->assertEquals(41.319, round($result->getCoordinates()->getLatitude(), 3));
49
        // $this->assertEquals('8820', $result->getPostalCode());
50
51
        // No hammering
52
        // sleep(5);
53
54
        // $result = $service->geocode("71, avenue des Champs Élysées, Paris, France");
55
        // $this->assertNotEmpty($result);
56
        // $this->assertEquals('FR', $result->getCountry()->getCode());
57
        // $this->assertEquals('75008', $result->getPostalCode());
58
        // $this->assertEquals(48.871, round($result->getCoordinates()->getLatitude(), 3));
59
    }
60
61
    public function testBing(): void
62
    {
63
        if (!Environment::getEnv('BING_MAPS_API_KEY')) {
64
            $this->markTestSkipped("Need a BING_MAPS_API_KEY env");
65
        }
66
67
        $service = new BingMaps;
68
69
        $result = $service->reverseGeocode('41.31900', '2.07465');
70
        $this->assertNotEmpty($result);
71
        $this->assertEquals($result->getCountry()->getCode(), 'ES');
72
        $this->assertEquals(round($result->getCoordinates()->getLatitude(), 3), 41.319);
73
        $this->assertEquals($result->getPostalCode(), '08820');
74
75
        // No hammering
76
        sleep(5);
77
78
        $result = $service->geocode("71, avenue des Champs Élysées, Paris, France");
79
        $this->assertNotEmpty($result);
80
        $this->assertEquals($result->getCountry()->getCode(), 'FR');
81
        $this->assertEquals($result->getPostalCode(), '75008');
82
        $this->assertEquals(round($result->getCoordinates()->getLatitude(), 3), 48.871);
83
    }
84
85
    public function testMapBox(): void
86
    {
87
        if (!Environment::getEnv('MAPBOX_API_KEY')) {
88
            $this->markTestSkipped("Need a MAPBOX_API_KEY env");
89
        }
90
91
        $service = new MapBox;
92
93
        $result = $service->reverseGeocode('41.31900', '2.07465');
94
        $this->assertNotEmpty($result);
95
        $this->assertEquals($result->getCountry()->getCode(), 'ES');
96
        $this->assertEquals(round($result->getCoordinates()->getLatitude(), 3), 41.319);
97
        $this->assertEquals($result->getPostalCode(), '08820');
98
99
        // No hammering
100
        sleep(5);
101
102
        $result = $service->geocode("71, avenue des Champs Élysées, Paris, France");
103
        $this->assertNotEmpty($result);
104
        $this->assertEquals($result->getCountry()->getCode(), 'FR');
105
        $this->assertEquals($result->getPostalCode(), '75008');
106
        $this->assertEquals(round($result->getCoordinates()->getLatitude(), 3), 48.871);
107
    }
108
109
    public function testNominatim(): void
110
    {
111
        $service = new Nominatim;
112
113
        $result = $service->reverseGeocode('41.31900', '2.07465');
114
        $this->assertNotEmpty($result);
115
        $this->assertEquals($result->getCountry()->getCode(), 'ES');
116
        $this->assertEquals(round($result->getCoordinates()->getLatitude(), 3), 41.319);
117
        $this->assertEquals($result->getPostalCode(), '08820');
118
119
        // No hammering
120
        sleep(5);
121
122
        $result = $service->geocode("71, avenue des Champs Élysées, Paris, France");
123
        $this->assertNotEmpty($result);
124
        $this->assertEquals($result->getCountry()->getCode(), 'FR');
125
        $this->assertEquals($result->getPostalCode(), '75008');
126
        $this->assertEquals(round($result->getCoordinates()->getLatitude(), 3), 48.871);
127
    }
128
}
129