Skip to content

Commit 237587f

Browse files
committed
split tests into multiple files
1 parent 15a74f1 commit 237587f

File tree

8 files changed

+269
-240
lines changed

8 files changed

+269
-240
lines changed

composer.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@
1414
"OpenCage\\Geocoder\\": "src"
1515
}
1616
},
17+
"autoload-dev": {
18+
"psr-4": {
19+
"OpenCage\\Geocoder\\Test\\": "tests"
20+
}
21+
},
1722
"require": {
1823
"php": ">=8.2",
1924
"guzzlehttp/guzzle": "^7.0"

phpunit.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@
1414
</php>
1515
<testsuites>
1616
<testsuite name="OpenCage geocoder Test Suite">
17-
<directory suffix=".php">./tests/</directory>
18-
<exclude>tests/bootstrap.php</exclude>
17+
<directory suffix="Test.php">./tests/</directory>
1918
</testsuite>
2019
</testsuites>
2120
<source>

tests/AsyncTest.php

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?php
2+
3+
namespace OpenCage\Geocoder\Test;
4+
5+
use OpenCage\Geocoder\Geocoder;
6+
7+
class AsyncTest extends TestCase
8+
{
9+
public function testAsyncLondon(): void
10+
{
11+
$geocoder = new Geocoder(self::OPENCAGE_TEST_APIKEY_200);
12+
$promise = $geocoder->geocodeAsync("82 Clerkenwell Road, London");
13+
/** @var array{status: array{code: int, message: string}} $result */
14+
$result = $promise->wait();
15+
16+
$this->assertEquals(200, $result['status']['code']);
17+
$this->assertEquals('OK', $result['status']['message']);
18+
}
19+
20+
public function testAsyncNetworkError(): void
21+
{
22+
$geocoder = new Geocoder(self::OPENCAGE_TEST_APIKEY_200);
23+
$geocoder->setHost('doesnotexist.opencagedata.com');
24+
$promise = $geocoder->geocodeAsync('London');
25+
/** @var array{status: array{code: int, message: string}} $result */
26+
$result = $promise->wait();
27+
28+
$this->assertEquals(498, $result['status']['code']);
29+
$this->assertStringContainsString('network issue', $result['status']['message']);
30+
}
31+
32+
public function testAsyncOverQuota(): void
33+
{
34+
$geocoder = new Geocoder(self::OPENCAGE_TEST_APIKEY_402);
35+
$promise = $geocoder->geocodeAsync('Johannesburg');
36+
/** @var array{status: array{code: int, message: string}} $result */
37+
$result = $promise->wait();
38+
39+
$this->assertEquals(402, $result['status']['code']);
40+
$this->assertEquals('quota exceeded', $result['status']['message']);
41+
}
42+
43+
public function testAsyncDisabledKey(): void
44+
{
45+
$geocoder = new Geocoder(self::OPENCAGE_TEST_APIKEY_403_DISABLED);
46+
$promise = $geocoder->geocodeAsync('Johannesburg');
47+
/** @var array{status: array{code: int, message: string}} $result */
48+
$result = $promise->wait();
49+
50+
$this->assertEquals(403, $result['status']['code']);
51+
$this->assertStringContainsString('disabled', $result['status']['message']);
52+
}
53+
54+
public function testAsyncMissingKey(): void
55+
{
56+
$geocoder = new Geocoder();
57+
$this->expectException(\Exception::class);
58+
$this->expectExceptionMessage('Missing API key');
59+
$geocoder->geocodeAsync('London');
60+
}
61+
62+
public function testReverseGeocodeAsync(): void
63+
{
64+
$geocoder = new Geocoder(self::OPENCAGE_TEST_APIKEY_200);
65+
$promise = $geocoder->geocodeReverseAsync(51.5227, -0.1025);
66+
/** @var array{status: array{code: int, message: string}} $result */
67+
$result = $promise->wait();
68+
69+
$this->assertEquals(200, $result['status']['code']);
70+
}
71+
}

tests/ErrorTest.php

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
3+
namespace OpenCage\Geocoder\Test;
4+
5+
use OpenCage\Geocoder\Geocoder;
6+
7+
class ErrorTest extends TestCase
8+
{
9+
public function testMissingKey(): void
10+
{
11+
$geocoder = new Geocoder();
12+
try {
13+
$result = $geocoder->geocode('Johannesburg');
14+
} catch (\Exception $e) {
15+
$this->assertEquals('Missing API key', $e->getMessage());
16+
return;
17+
}
18+
$this->fail();
19+
}
20+
21+
public function testInvalidKey(): void
22+
{
23+
$geocoder = new Geocoder('invalid-APIKEY');
24+
$result = $geocoder->geocode('Johannesburg');
25+
$this->assertEquals(401, $result['status']['code']);
26+
$this->assertEquals('invalid API key', $result['status']['message']);
27+
}
28+
29+
public function testOverQuota(): void
30+
{
31+
$geocoder = new Geocoder(self::OPENCAGE_TEST_APIKEY_402);
32+
$result = $geocoder->geocode('Johannesburg');
33+
$this->assertEquals(402, $result['status']['code']);
34+
$this->assertEquals('quota exceeded', $result['status']['message']);
35+
}
36+
37+
public function testRateLimited(): void
38+
{
39+
$geocoder = new Geocoder(self::OPENCAGE_TEST_APIKEY_429);
40+
$result = $geocoder->geocode('Johannesburg');
41+
$this->assertEquals(429, $result['status']['code']);
42+
}
43+
44+
public function testIpRejected(): void
45+
{
46+
$geocoder = new Geocoder(self::OPENCAGE_TEST_APIKEY_403_IP_REJECTED);
47+
$result = $geocoder->geocode('Johannesburg');
48+
$this->assertEquals(403, $result['status']['code']);
49+
$this->assertStringContainsString('IP address rejected', $result['status']['message']);
50+
}
51+
52+
public function testDisabledKey(): void
53+
{
54+
$geocoder = new Geocoder(self::OPENCAGE_TEST_APIKEY_403_DISABLED);
55+
$result = $geocoder->geocode('Johannesburg');
56+
$this->assertEquals(403, $result['status']['code']);
57+
$this->assertStringContainsString('disabled', $result['status']['message']);
58+
}
59+
}

tests/GeocodeTest.php

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?php
2+
3+
namespace OpenCage\Geocoder\Test;
4+
5+
use OpenCage\Geocoder\Geocoder;
6+
7+
class GeocodeTest extends TestCase
8+
{
9+
public function testLondon(): void
10+
{
11+
$geocoder = new Geocoder(self::OPENCAGE_TEST_APIKEY_200);
12+
$result = $geocoder->geocode("82 Clerkenwell Road, London");
13+
14+
$this->assertEquals(200, $result['status']['code']);
15+
$this->assertEquals('OK', $result['status']['message']);
16+
}
17+
18+
public function testWithOptionalParams(): void
19+
{
20+
$geocoder = new Geocoder(self::OPENCAGE_TEST_APIKEY_200);
21+
$result = $geocoder->geocode('82 Clerkenwell Road, London', [
22+
'language' => 'fr',
23+
'countrycode' => 'gb'
24+
]);
25+
$this->assertEquals(200, $result['status']['code']);
26+
}
27+
28+
// https://opencagedata.com/api#testingkeys - query 'NOWHERE-INTERESTING' returns 200 with zero results
29+
public function testNoResults(): void
30+
{
31+
$geocoder = new Geocoder(self::OPENCAGE_TEST_APIKEY_200);
32+
$result = $geocoder->geocode('NOWHERE-INTERESTING');
33+
$this->assertEquals(200, $result['status']['code']);
34+
$this->assertEquals(0, $result['total_results']);
35+
$this->assertEmpty($result['results']);
36+
}
37+
38+
public function testReverseGeocode(): void
39+
{
40+
$geocoder = new Geocoder(self::OPENCAGE_TEST_APIKEY_200);
41+
$result = $geocoder->geocodeReverse(51.5227, -0.1025);
42+
$this->assertEquals(200, $result['status']['code']);
43+
$this->assertGreaterThan(0, $result['total_results']);
44+
}
45+
46+
public function testReverseGeocodeWithStrings(): void
47+
{
48+
$geocoder = new Geocoder(self::OPENCAGE_TEST_APIKEY_200);
49+
$result = $geocoder->geocodeReverse('51.5227', '-0.1025');
50+
$this->assertEquals(200, $result['status']['code']);
51+
$this->assertGreaterThan(0, $result['total_results']);
52+
}
53+
}

0 commit comments

Comments
 (0)