Passed
Push — master ( 5a3d06...6e2809 )
by Thomas
02:40
created

GeoTest::testGraphloc()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 1
eloc 7
c 1
b 0
f 1
nc 1
nop 0
dl 0
loc 10
rs 10
1
<?php
2
3
namespace LeKoala\GeoTools\Test;
4
5
use SilverStripe\Dev\SapphireTest;
6
use LeKoala\GeoTools\Services\IpApi;
7
use LeKoala\GeoTools\Services\Geocoder;
8
use LeKoala\GeoTools\Services\Graphloc;
9
use SilverStripe\Core\Injector\Injector;
10
use LeKoala\GeoTools\Services\GeocodeXyz;
11
use LeKoala\GeoTools\Services\Geolocator;
12
use LeKoala\GeoTools\Services\MapBox;
13
use SilverStripe\Core\Environment;
14
use LeKoala\GeoTools\Services\Nominatim;
15
16
class GeoTest extends SapphireTest
17
{
18
    public function testInjector()
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()
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.6376', $result->getCoordinates()->getLatitude());
38
        $this->assertEquals('01000', $result->getPostalCode());
39
    }
40
41
    // Seems dead?
42
    // public function testGraphloc()
43
    // {
44
    //     $ip = '208.80.152.201';
45
    //     $service = new Graphloc;
46
    //     $result = $service->geolocate($ip);
47
48
    //     $this->assertNotEmpty($result);
49
    //     $this->assertEquals($result->getCountry()->getCode(), 'US');
50
    //     $this->assertEquals($result->getCoordinates()->getLatitude(), '37.7898');
51
    //     $this->assertEquals($result->getPostalCode(), '94105');
52
    // }
53
54
    public function testGeocodeXyz()
55
    {
56
        $service = new GeocodeXyz;
57
58
        $result = $service->reverseGeocode('41.31900', '2.07465');
59
        $this->assertNotEmpty($result);
60
        $this->assertEquals('ES', $result->getCountry()->getCode());
61
        $this->assertEquals(41.319, round($result->getCoordinates()->getLatitude(), 3));
62
        $this->assertEquals('8820', $result->getPostalCode());
63
64
        // No hammering
65
        sleep(3);
66
67
        $result = $service->geocode("71, avenue des Champs Élysées, Paris, France");
68
        $this->assertNotEmpty($result);
69
        $this->assertEquals('FR', $result->getCountry()->getCode());
70
        $this->assertEquals('75008', $result->getPostalCode());
71
        $this->assertEquals(48.871, round($result->getCoordinates()->getLatitude(), 3));
72
    }
73
74
    public function testMapBox()
75
    {
76
        if (!Environment::getEnv('MAPBOX_API_KEY')) {
77
            $this->markTestSkipped("Need a MAPBOX_API_KEY env");
78
        }
79
80
        $service = new MapBox;
81
82
        $result = $service->reverseGeocode('41.31900', '2.07465');
83
        $this->assertNotEmpty($result);
84
        $this->assertEquals($result->getCountry()->getCode(), 'ES');
85
        $this->assertEquals(round($result->getCoordinates()->getLatitude(), 3), 41.319);
86
        $this->assertEquals($result->getPostalCode(), '8820');
87
88
        // No hammering
89
        sleep(1);
90
91
        $result = $service->geocode("71, avenue des Champs Élysées, Paris, France");
92
        $this->assertNotEmpty($result);
93
        $this->assertEquals($result->getCountry()->getCode(), 'FR');
94
        $this->assertEquals($result->getPostalCode(), '75008');
95
        $this->assertEquals(round($result->getCoordinates()->getLatitude(), 3), 48.871);
96
    }
97
98
    public function testNominatim()
99
    {
100
        $service = new Nominatim;
101
102
        $result = $service->reverseGeocode('41.31900', '2.07465');
103
        $this->assertNotEmpty($result);
104
        $this->assertEquals($result->getCountry()->getCode(), 'ES');
105
        $this->assertEquals(round($result->getCoordinates()->getLatitude(), 3), 41.319);
106
        $this->assertEquals($result->getPostalCode(), '8820');
107
108
        // No hammering
109
        sleep(1);
110
111
        $result = $service->geocode("71, avenue des Champs Élysées, Paris, France");
112
        $this->assertNotEmpty($result);
113
        $this->assertEquals($result->getCountry()->getCode(), 'FR');
114
        $this->assertEquals($result->getPostalCode(), '75008');
115
        $this->assertEquals(round($result->getCoordinates()->getLatitude(), 3), 48.871);
116
    }
117
}
118