Skip to content

Commit d1de57f

Browse files
committed
Test middleware with route model binding
1 parent 10526e3 commit d1de57f

File tree

4 files changed

+105
-0
lines changed

4 files changed

+105
-0
lines changed

tests/Stubs/Kernel.php

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
3+
namespace CodeZero\LocalizedRoutes\Tests\Stubs;
4+
5+
use Illuminate\Foundation\Http\Kernel as HttpKernel;
6+
7+
class Kernel extends HttpKernel
8+
{
9+
/**
10+
* The application's global HTTP middleware stack.
11+
*
12+
* These middleware are run during every request to your application.
13+
*
14+
* @var array
15+
*/
16+
protected $middleware = [];
17+
18+
/**
19+
* The application's route middleware groups.
20+
*
21+
* @var array
22+
*/
23+
protected $middlewareGroups = [
24+
'web' => [
25+
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
26+
\Illuminate\Session\Middleware\StartSession::class,
27+
// \Illuminate\Session\Middleware\AuthenticateSession::class,
28+
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
29+
\Illuminate\Routing\Middleware\SubstituteBindings::class,
30+
],
31+
];
32+
33+
/**
34+
* The application's route middleware.
35+
*
36+
* These middleware may be assigned to groups or used individually.
37+
*
38+
* @var array
39+
*/
40+
protected $routeMiddleware = [];
41+
42+
/**
43+
* The priority-sorted list of middleware.
44+
*
45+
* This forces non-global middleware to always be in the given order.
46+
*
47+
* @var array
48+
*/
49+
protected $middlewarePriority = [
50+
\Illuminate\Session\Middleware\StartSession::class,
51+
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
52+
\App\Http\Middleware\Authenticate::class,
53+
\Illuminate\Routing\Middleware\ThrottleRequests::class,
54+
\Illuminate\Session\Middleware\AuthenticateSession::class,
55+
\CodeZero\LocalizedRoutes\Middleware\LocalizedRouteLocaleHandler::class, // <== Added Middleware Here
56+
\Illuminate\Routing\Middleware\SubstituteBindings::class,
57+
\Illuminate\Auth\Middleware\Authorize::class,
58+
];
59+
}

tests/Stubs/Model.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,23 @@ class Model extends BaseModel
2525
public function getRouteKey()
2626
{
2727
return $this->slugs[App::getLocale()];
28+
}
29+
30+
/**
31+
* Fake route model binding.
32+
*
33+
* @param string $slug
34+
*
35+
* @return mixed
36+
*/
37+
public function resolveRouteBinding($slug)
38+
{
39+
$validSlug = $this->slugs[App::getLocale()];
40+
41+
if ($validSlug !== $slug) {
42+
abort(404);
43+
}
2844

45+
return $validSlug;
2946
}
3047
}

tests/TestCase.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,18 @@ protected function getRoutes()
5959
return new Collection(Route::getRoutes());
6060
}
6161

62+
/**
63+
* Resolve application Console Kernel implementation.
64+
*
65+
* @param \Illuminate\Foundation\Application $app
66+
*
67+
* @return void
68+
*/
69+
protected function resolveApplicationHttpKernel($app)
70+
{
71+
$app->singleton('Illuminate\Contracts\Http\Kernel', 'CodeZero\LocalizedRoutes\Tests\Stubs\Kernel');
72+
}
73+
6274
/**
6375
* Get the packages service providers.
6476
*

tests/Unit/Middleware/LocalizedRouteLocaleHandlerTest.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,21 @@ public function it_sets_the_locale_for_localized_routes_within_route_groups()
7777
$response->assertOk();
7878
$this->assertEquals('nl', $response->original);
7979
}
80+
81+
/** @test */
82+
public function it_allows_for_localized_route_model_binding()
83+
{
84+
$this->setSupportedLocales(['en', 'nl']);
85+
86+
Route::localized(function () {
87+
Route::get('route/{model}', function (Model $model) {
88+
return App::getLocale();
89+
})->name('route.name')->middleware(['web', LocalizedRouteLocaleHandler::class]);
90+
});
91+
92+
$this->call('GET', '/en/route/en-slug')->assertOk();
93+
$this->call('GET', '/nl/route/nl-slug')->assertOk();
94+
$this->call('GET', '/en/route/nl-slug')->assertNotFound();
95+
$this->call('GET', '/nl/route/en-slug')->assertNotFound();
96+
}
8097
}

0 commit comments

Comments
 (0)