Skip to content

Commit 6607efa

Browse files
committed
Fix duplicate warnings for same URIs on different versions with Lumen as well as implement tests for the Lumen adapter.
Signed-off-by: Jason Lewis <[email protected]>
1 parent 04aaf7b commit 6607efa

File tree

7 files changed

+44
-14
lines changed

7 files changed

+44
-14
lines changed

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
"require-dev": {
2222
"lucadegasperi/oauth2-server-laravel": "4.1.*",
2323
"tymon/jwt-auth": "0.5.*",
24+
"laravel/lumen-framework": "5.1.*",
2425
"illuminate/auth": "5.1.*",
2526
"illuminate/cache": "5.1.*",
2627
"illuminate/events": "5.1.*",

src/Routing/Adapter/Lumen.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ protected function createRouteCollections(array $versions)
177177
{
178178
foreach ($versions as $version) {
179179
if (! isset($this->routes[$version])) {
180-
$this->routes[$version] = new RouteCollector($this->parser, $this->generator);
180+
$this->routes[$version] = new RouteCollector($this->parser, clone $this->generator);
181181
}
182182
}
183183
}

src/Routing/Router.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -389,10 +389,10 @@ public function addRoute($methods, $uri, $action)
389389

390390
$action = $this->mergeLastGroupAttributes($action);
391391

392-
$uri = $uri === '/' ? $uri : '/'.trim($uri, '/');
392+
$uri = $uri === '/' ? $uri : trim($uri, '/');
393393

394394
if (! empty($action['prefix'])) {
395-
$uri = rtrim('/'.trim($action['prefix'], '/').'/'.trim($uri, '/'), '/');
395+
$uri = rtrim(trim($action['prefix'], '/').'/'.trim($uri, '/'), '/');
396396

397397
unset($action['prefix']);
398398
}

tests/Routing/Adapter/BaseAdapterTest.php

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,19 @@
66
use Dingo\Api\Http;
77
use Dingo\Api\Routing\Router;
88
use PHPUnit_Framework_TestCase;
9-
use Illuminate\Events\Dispatcher;
109
use Illuminate\Container\Container;
11-
use Dingo\Api\Routing\Adapter\Laravel;
1210
use Dingo\Api\Tests\Stubs\MiddlewareStub;
13-
use Illuminate\Routing\Router as IlluminateRouter;
1411

1512
abstract class BaseAdapterTest extends PHPUnit_Framework_TestCase
1613
{
1714
public function setUp()
1815
{
1916
$this->container = new Container;
17+
$this->container['Illuminate\Container\Container'] = $this->container;
2018
$this->container['api.auth'] = new MiddlewareStub;
2119
$this->container['api.limiting'] = new MiddlewareStub;
2220

23-
$class = $this->getAdapterClassName();
24-
25-
$this->adapter = new $class(new IlluminateRouter(new Dispatcher($this->container), $this->container));
21+
$this->adapter = $this->getAdapterInstance();
2622
$this->exception = m::mock('Dingo\Api\Exception\Handler');
2723
$this->router = new Router($this->adapter, new Http\Parser\Accept('api', 'v1', 'json'), $this->exception, $this->container, null, null);
2824

@@ -34,7 +30,7 @@ public function tearDown()
3430
m::close();
3531
}
3632

37-
abstract public function getAdapterClassName();
33+
abstract public function getAdapterInstance();
3834

3935
protected function createRequest($uri, $method, array $headers = [])
4036
{

tests/Routing/Adapter/LaravelTest.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,14 @@
22

33
namespace Dingo\Api\Tests\Routing\Adapter;
44

5+
use Illuminate\Routing\Router;
6+
use Illuminate\Events\Dispatcher;
7+
use Dingo\Api\Routing\Adapter\Laravel;
8+
59
class LaravelTest extends BaseAdapterTest
610
{
7-
public function getAdapterClassName()
11+
public function getAdapterInstance()
812
{
9-
return 'Dingo\Api\Routing\Adapter\Laravel';
13+
return new Laravel(new Router(new Dispatcher, $this->container));
1014
}
1115
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
namespace Dingo\Api\Tests\Routing\Adapter;
4+
5+
use Laravel\Lumen\Application;
6+
use Dingo\Api\Routing\Adapter\Lumen;
7+
use FastRoute\RouteParser\Std as StdRouteParser;
8+
use FastRoute\Dispatcher\GroupCountBased as GcbDispatcher;
9+
use FastRoute\DataGenerator\GroupCountBased as GcbDataGenerator;
10+
11+
class LumenTest extends BaseAdapterTest
12+
{
13+
public function getAdapterInstance()
14+
{
15+
$app = new Application;
16+
17+
$app->routeMiddleware([
18+
'api.auth' => get_class($this->container['api.auth']),
19+
'api.limiting' => get_class($this->container['api.limiting'])
20+
]);
21+
22+
return new Lumen($app, new StdRouteParser, new GcbDataGenerator, GcbDispatcher::class);
23+
}
24+
25+
public function testRoutesWithDomains()
26+
{
27+
$this->markTestSkipped('Lumen does not support sub-domain routing.');
28+
}
29+
}

tests/Routing/RouterTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313

1414
class RouterTest extends Adapter\BaseAdapterTest
1515
{
16-
public function getAdapterClassName()
16+
public function getAdapterInstance()
1717
{
18-
return 'Dingo\Api\Tests\Stubs\RoutingAdapterStub';
18+
return $this->container->make('Dingo\Api\Tests\Stubs\RoutingAdapterStub');
1919
}
2020

2121
public function testRouteOptionsMergeCorrectly()

0 commit comments

Comments
 (0)