Skip to content

Commit f39ecf8

Browse files
author
Sebastien Malot
committed
Atoum unit tests
1 parent a50a14b commit f39ecf8

File tree

6 files changed

+312
-6
lines changed

6 files changed

+312
-6
lines changed

.atoum.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
<?php
22

3+
include 'vendor/autoload.php';
4+
35
use \mageekguy\atoum;
46

57
$report = $script->addDefaultReport();

.bootstrap.atoum.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<?php
2+
3+
require __DIR__ . '/vendor/autoload.php';

.gitignore

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
composer.phar
1+
/coverage/
22
/vendor/
3-
4-
# Commit your application's lock file http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file
5-
# You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file
6-
# composer.lock
3+
composer.phar
4+
composer.lock

Kong/ServiceFactory.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
use Smalot\Kong\Services\ConsumerInterface;
1313
use Smalot\Kong\Services\Plugin;
1414
use Smalot\Kong\Services\PluginInterface;
15+
use Smalot\Kong\Services\Sni;
16+
use Smalot\Kong\Services\SniInterface;
1517
use Smalot\Kong\Services\Target;
1618
use Smalot\Kong\Services\TargetInterface;
1719
use Smalot\Kong\Services\Upstream;
@@ -24,7 +26,7 @@ final class ServiceFactory
2426
CertificateInterface::SERVICE_NAME => Certificate::class,
2527
ConsumerInterface::SERVICE_NAME => Consumer::class,
2628
PluginInterface::SERVICE_NAME => Plugin::class,
27-
// SniInterface::SERVICE_NAME => Sni::class,
29+
SniInterface::SERVICE_NAME => Sni::class,
2830
TargetInterface::SERVICE_NAME => Target::class,
2931
UpstreamInterface::SERVICE_NAME => Upstream::class,
3032
];
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
3+
namespace Smalot\Kong\Tests\Units;
4+
5+
use mageekguy\atoum;
6+
7+
/**
8+
* Class ServiceFactory
9+
*
10+
* @package Smalot\Kong\Tests\Units
11+
*/
12+
class ServiceFactory extends atoum\test
13+
{
14+
15+
public function testFactory()
16+
{
17+
$factory = new \Smalot\Kong\ServiceFactory();
18+
19+
$service = $factory->get('api');
20+
$this->assert->object($service)->isInstanceOf('\Smalot\Kong\Services\Api');
21+
$service = $factory->get('certificate');
22+
$this->assert->object($service)->isInstanceOf('\Smalot\Kong\Services\Certificate');
23+
$service = $factory->get('consumer');
24+
$this->assert->object($service)->isInstanceOf('\Smalot\Kong\Services\Consumer');
25+
$service = $factory->get('plugin');
26+
$this->assert->object($service)->isInstanceOf('\Smalot\Kong\Services\Plugin');
27+
$service = $factory->get('sni');
28+
$this->assert->object($service)->isInstanceOf('\Smalot\Kong\Services\Sni');
29+
$service = $factory->get('target');
30+
$this->assert->object($service)->isInstanceOf('\Smalot\Kong\Services\Target');
31+
$service = $factory->get('upstream');
32+
$this->assert->object($service)->isInstanceOf('\Smalot\Kong\Services\Upstream');
33+
}
34+
35+
public function testFactoryFail()
36+
{
37+
$factory = new \Smalot\Kong\ServiceFactory();
38+
39+
$this->assert->exception(
40+
function () use ($factory) {
41+
$factory->get('wrong-service');
42+
}
43+
)->hasMessage(
44+
'The service "wrong-service" is not available. Pick one among "api", "certificate", "consumer", "plugin", "sni", "target", "upstream".'
45+
);
46+
}
47+
}

Kong/Tests/Units/Services/Api.php

Lines changed: 254 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,254 @@
1+
<?php
2+
3+
namespace Smalot\Kong\Tests\Units\Services;
4+
5+
use mageekguy\atoum;
6+
7+
/**
8+
* Class Api
9+
*
10+
* @package Smalot\Kong\Tests\Units\Services
11+
*/
12+
class Api extends atoum\test
13+
{
14+
15+
public function testCreate()
16+
{
17+
$factory = new \Smalot\Kong\ServiceFactory();
18+
/** @var \Smalot\Kong\Services\Api $service */
19+
$service = $factory->get('api');
20+
21+
$name = uniqid('apiname', true);
22+
23+
$response = $service->create(
24+
[
25+
'name' => $name,
26+
'uris' => '/ping',
27+
'upstream_url' => 'http://ping/',
28+
]
29+
);
30+
31+
$this->assert->integer($response->getStatusCode())->isEqualTo(201);
32+
33+
$api = $response->json();
34+
$this->assert->array($api)->keys->isEqualTo(
35+
[
36+
'created_at',
37+
'strip_uri',
38+
'id',
39+
'name',
40+
'http_if_terminated',
41+
'preserve_host',
42+
'upstream_url',
43+
'uris',
44+
'upstream_connect_timeout',
45+
'upstream_send_timeout',
46+
'upstream_read_timeout',
47+
'retries',
48+
'https_only',
49+
]
50+
);
51+
52+
$this->assert->string($api['name'])->isEqualTo($name);
53+
}
54+
55+
public function testGet()
56+
{
57+
$factory = new \Smalot\Kong\ServiceFactory();
58+
/** @var \Smalot\Kong\Services\Api $service */
59+
$service = $factory->get('api');
60+
61+
$name = uniqid('apiname', true);
62+
63+
$response = $service->create(
64+
[
65+
'name' => $name,
66+
'uris' => '/ping',
67+
'upstream_url' => 'http://ping/',
68+
]
69+
);
70+
71+
$this->assert->integer($response->getStatusCode())->isEqualTo(201);
72+
$api = $response->json();
73+
74+
// By name
75+
$response = $service->retrieve($name);
76+
$this->assert->integer($response->getStatusCode())->isEqualTo(200);
77+
$this->assert->array($response->json())->isEqualTo($api);
78+
79+
// By id
80+
$response = $service->retrieve($api['id']);
81+
$this->assert->integer($response->getStatusCode())->isEqualTo(200);
82+
$this->assert->array($response->json())->isEqualTo($api);
83+
}
84+
85+
public function testAll()
86+
{
87+
$factory = new \Smalot\Kong\ServiceFactory();
88+
/** @var \Smalot\Kong\Services\Api $service */
89+
$service = $factory->get('api');
90+
91+
$name = uniqid('apiname', true);
92+
$service->create(
93+
[
94+
'name' => $name,
95+
'uris' => '/ping',
96+
'upstream_url' => 'http://ping/',
97+
]
98+
);
99+
100+
$name = uniqid('apiname', true);
101+
$service->create(
102+
[
103+
'name' => $name,
104+
'uris' => '/ping',
105+
'upstream_url' => 'http://ping/',
106+
]
107+
);
108+
109+
// Full list
110+
$response = $service->all();
111+
$list = $response->json();
112+
113+
$this->assert->integer($response->getStatusCode())->isEqualTo(200);
114+
$this->assert->integer($list['total'])->isGreaterThan(1);
115+
$this->assert->array($list['data'])->size->isGreaterThan(1);
116+
117+
// Test paging
118+
$response = $service->all(['size' => 1]);
119+
$list = $response->json();
120+
121+
$this->assert->integer($response->getStatusCode())->isEqualTo(200);
122+
$this->assert->integer($list['total'])->isGreaterThan(1);
123+
$this->assert->array($list['data'])->size->isEqualTo(1);
124+
}
125+
126+
public function testUpdateOrCreate()
127+
{
128+
$factory = new \Smalot\Kong\ServiceFactory();
129+
/** @var \Smalot\Kong\Services\Api $service */
130+
$service = $factory->get('api');
131+
132+
$name = uniqid('apiname', true);
133+
134+
$response = $service->create(
135+
[
136+
'name' => $name,
137+
'uris' => '/ping',
138+
'upstream_url' => 'http://ping/',
139+
]
140+
);
141+
142+
$this->assert->integer($response->getStatusCode())->isEqualTo(201);
143+
$api = $response->json();
144+
145+
$api['name'] = $name.'-updated';
146+
147+
// Update
148+
$response = $service->update($api['id'], $api);
149+
$this->assert->integer($response->getStatusCode())->isEqualTo(200);
150+
$this->assert->array($response->json())->isEqualTo($api);
151+
152+
$api['name'] = $name.'-updated-or-created';
153+
154+
// Update or Create
155+
$response = $service->updateOrCreate($api);
156+
$this->assert->integer($response->getStatusCode())->isEqualTo(200);
157+
$this->assert->array($response->json())->isEqualTo($api);
158+
159+
unset($api['id']);
160+
161+
// Conflict
162+
$this->assert->exception(
163+
function () use ($service, $api) {
164+
$response = $service->updateOrCreate($api);
165+
}
166+
)->message->startWith('Something went wrong when calling kong (409 - Conflict).');
167+
$this->assert->integer($this->exception->getCode())->isEqualTo(409);
168+
}
169+
170+
public function testDelete()
171+
{
172+
$factory = new \Smalot\Kong\ServiceFactory();
173+
/** @var \Smalot\Kong\Services\Api $service */
174+
$service = $factory->get('api');
175+
176+
$name = uniqid('apiname', true);
177+
178+
$response = $service->create(
179+
[
180+
'name' => $name,
181+
'uris' => '/ping',
182+
'upstream_url' => 'http://ping/',
183+
]
184+
);
185+
186+
$this->assert->integer($response->getStatusCode())->isEqualTo(201);
187+
$api = $response->json();
188+
189+
// Delete
190+
$response = $service->delete($api['id']);
191+
$this->assert->integer($response->getStatusCode())->isEqualTo(204);
192+
193+
// Conflict
194+
$this->assert->exception(
195+
function () use ($service, $api) {
196+
$response = $service->retrieve($api['id']);
197+
}
198+
)->message->startWith('Something went wrong when calling kong (404 - Not Found).');
199+
$this->assert->integer($this->exception->getCode())->isEqualTo(404);
200+
}
201+
202+
public function testPlugin()
203+
{
204+
$factory = new \Smalot\Kong\ServiceFactory();
205+
/** @var \Smalot\Kong\Services\Api $service */
206+
$service = $factory->get('api');
207+
208+
$name = uniqid('apiname', true);
209+
210+
$response = $service->create(
211+
[
212+
'name' => $name,
213+
'uris' => '/ping',
214+
'upstream_url' => 'http://ping/',
215+
]
216+
);
217+
218+
$this->assert->integer($response->getStatusCode())->isEqualTo(201);
219+
$api = $response->json();
220+
221+
// Plugins
222+
$response = $service->plugins($api['id']);
223+
$this->assert->integer($response->getStatusCode())->isEqualTo(200);
224+
$this->assert->array($response->json())->isEqualTo(['total' => 0, 'data' => []]);
225+
226+
/** @var \Smalot\Kong\Services\Plugin $plugins */
227+
$plugins = $factory->get('plugin');
228+
229+
$response = $plugins->create(
230+
$api['id'],
231+
[
232+
'name' => 'rate-limiting',
233+
'config' => [
234+
'minute' => 20,
235+
'hour' => 500,
236+
],
237+
]
238+
);
239+
240+
$plugin = $response->json();
241+
242+
$this->assert->array($plugin)->keys->isEqualTo(
243+
[
244+
'created_at',
245+
'config',
246+
'id',
247+
'name',
248+
'api_id',
249+
'enabled',
250+
]
251+
);
252+
$this->assert->string($plugin['name'])->isEqualTo('rate-limiting');
253+
}
254+
}

0 commit comments

Comments
 (0)