Skip to content

Commit dcc8e03

Browse files
committed
Adjust implementation + add tests
1 parent e849955 commit dcc8e03

File tree

3 files changed

+42
-17
lines changed

3 files changed

+42
-17
lines changed

src/Middleware.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@
88

99
class Middleware
1010
{
11+
/**
12+
* The root template that will be loaded on the first page visit.
13+
*
14+
* @var string
15+
*/
1116
protected $rootView = 'app';
1217

1318
/**
@@ -59,7 +64,7 @@ public function handle(Request $request, Closure $next)
5964

6065
Inertia::share($this->share($request));
6166

62-
Inertia::setRootView($this->rootView($request) ?? $this->rootView);
67+
Inertia::setRootView($this->rootView($request));
6368

6469
$response = $next($request);
6570
$response = $this->checkVersion($request, $response);
@@ -135,13 +140,14 @@ public function resolveValidationErrors(Request $request)
135140
}
136141

137142
/**
138-
* Ability to set the current root view.
143+
* Sets the root template that will be loaded on the first page visit.
139144
*
145+
* @see https://inertiajs.com/server-side-setup#root-template
140146
* @param Request $request
141147
* @return string
142148
*/
143149
public function rootView(Request $request)
144150
{
145-
return 'app';
151+
return $this->rootView;
146152
}
147153
}

stubs/middleware.stub

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,4 @@ class {{ class }} extends Middleware
3232
//
3333
]);
3434
}
35-
36-
/**
37-
* Ability to set the current root view.
38-
*
39-
* @param Request $request
40-
* @return string
41-
*/
42-
public function rootView(Request $request)
43-
{
44-
// return 'custom';
45-
}
4635
}

tests/MiddlewareTest.php

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use Illuminate\Support\MessageBag;
1010
use Illuminate\Support\ViewErrorBag;
1111
use Inertia\Inertia;
12+
use Inertia\Middleware;
1213
use Inertia\Tests\Stubs\ExampleMiddleware;
1314

1415
class MiddlewareTest extends TestCase
@@ -139,10 +140,39 @@ public function test_default_validation_errors_can_be_overwritten()
139140
]);
140141
}
141142

142-
private function prepareMockEndpoint($version = null, $shared = [])
143+
public function test_middleware_can_change_the_root_view_via_a_property()
143144
{
144-
return Route::middleware(StartSession::class)->get('/', function (Request $request) use ($version, $shared) {
145-
return (new ExampleMiddleware($version, $shared))->handle($request, function ($request) {
145+
$this->prepareMockEndpoint(null, [], new class extends Middleware {
146+
protected $rootView = 'welcome';
147+
});
148+
149+
$response = $this->get('/');
150+
$response->assertOk();
151+
$response->assertViewIs('welcome');
152+
}
153+
154+
public function test_middleware_can_change_the_root_view_by_overriding_the_rootview_method()
155+
{
156+
$this->prepareMockEndpoint(null, [], new class extends Middleware {
157+
public function rootView(Request $request)
158+
{
159+
return 'welcome';
160+
}
161+
});
162+
163+
$response = $this->get('/');
164+
$response->assertOk();
165+
$response->assertViewIs('welcome');
166+
}
167+
168+
private function prepareMockEndpoint($version = null, $shared = [], $middleware = null)
169+
{
170+
if (is_null($middleware)) {
171+
$middleware = new ExampleMiddleware($version, $shared);
172+
}
173+
174+
return Route::middleware(StartSession::class)->get('/', function (Request $request) use ($middleware) {
175+
return $middleware->handle($request, function ($request) {
146176
return Inertia::render('User/Edit', ['user' => ['name' => 'Jonathan']])->toResponse($request);
147177
});
148178
});

0 commit comments

Comments
 (0)