Skip to content

Commit 22b22cd

Browse files
committed
merge and defer prop tests
1 parent c639445 commit 22b22cd

File tree

1 file changed

+136
-0
lines changed

1 file changed

+136
-0
lines changed

tests/ResponseTest.php

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@
1212
use Illuminate\Support\Fluent;
1313
use Illuminate\View\View;
1414
use Inertia\AlwaysProp;
15+
use Inertia\DeferProp;
1516
use Inertia\LazyProp;
17+
use Inertia\MergeProp;
1618
use Inertia\Response;
1719
use Inertia\Tests\Stubs\FakeResource;
1820
use Mockery;
@@ -51,6 +53,140 @@ public function test_server_response(): void
5153
$this->assertSame('<div id="app" data-page="{&quot;component&quot;:&quot;User\/Edit&quot;,&quot;props&quot;:{&quot;user&quot;:{&quot;name&quot;:&quot;Jonathan&quot;}},&quot;url&quot;:&quot;\/user\/123&quot;,&quot;version&quot;:&quot;123&quot;,&quot;clearHistory&quot;:false,&quot;encryptHistory&quot;:false}"></div>', $view->render());
5254
}
5355

56+
public function test_server_response_with_deferred_prop(): void
57+
{
58+
$request = Request::create('/user/123', 'GET');
59+
60+
$user = ['name' => 'Jonathan'];
61+
$response = new Response(
62+
'User/Edit',
63+
[
64+
'user' => $user,
65+
'foo' => new DeferProp(function () {
66+
return 'bar';
67+
}, 'default'),
68+
],
69+
'app',
70+
'123'
71+
);
72+
$response = $response->toResponse($request);
73+
$view = $response->getOriginalContent();
74+
$page = $view->getData()['page'];
75+
76+
$this->assertInstanceOf(BaseResponse::class, $response);
77+
$this->assertInstanceOf(View::class, $view);
78+
79+
$this->assertSame('User/Edit', $page['component']);
80+
$this->assertSame('Jonathan', $page['props']['user']['name']);
81+
$this->assertSame('/user/123', $page['url']);
82+
$this->assertSame('123', $page['version']);
83+
$this->assertFalse($page['clearHistory']);
84+
$this->assertFalse($page['encryptHistory']);
85+
$this->assertSame('<div id="app" data-page="{&quot;component&quot;:&quot;User\/Edit&quot;,&quot;props&quot;:{&quot;user&quot;:{&quot;name&quot;:&quot;Jonathan&quot;}},&quot;url&quot;:&quot;\/user\/123&quot;,&quot;version&quot;:&quot;123&quot;,&quot;clearHistory&quot;:false,&quot;encryptHistory&quot;:false,&quot;deferredProps&quot;:{&quot;default&quot;:[&quot;foo&quot;]}}"></div>', $view->render());
86+
}
87+
88+
public function test_server_response_with_deferred_prop_and_multiple_groups(): void
89+
{
90+
$request = Request::create('/user/123', 'GET');
91+
92+
$user = ['name' => 'Jonathan'];
93+
$response = new Response(
94+
'User/Edit',
95+
[
96+
'user' => $user,
97+
'foo' => new DeferProp(function () {
98+
return 'foo value';
99+
}, 'default'),
100+
'bar' => new DeferProp(function () {
101+
return 'bar value';
102+
}, 'default'),
103+
'baz' => new DeferProp(function () {
104+
return 'baz value';
105+
}, 'custom'),
106+
],
107+
'app',
108+
'123'
109+
);
110+
$response = $response->toResponse($request);
111+
$view = $response->getOriginalContent();
112+
$page = $view->getData()['page'];
113+
114+
$this->assertInstanceOf(BaseResponse::class, $response);
115+
$this->assertInstanceOf(View::class, $view);
116+
117+
$this->assertSame('User/Edit', $page['component']);
118+
$this->assertSame('Jonathan', $page['props']['user']['name']);
119+
$this->assertSame('/user/123', $page['url']);
120+
$this->assertSame('123', $page['version']);
121+
$this->assertFalse($page['clearHistory']);
122+
$this->assertFalse($page['encryptHistory']);
123+
$this->assertSame('<div id="app" data-page="{&quot;component&quot;:&quot;User\/Edit&quot;,&quot;props&quot;:{&quot;user&quot;:{&quot;name&quot;:&quot;Jonathan&quot;}},&quot;url&quot;:&quot;\/user\/123&quot;,&quot;version&quot;:&quot;123&quot;,&quot;clearHistory&quot;:false,&quot;encryptHistory&quot;:false,&quot;deferredProps&quot;:{&quot;default&quot;:[&quot;foo&quot;,&quot;bar&quot;],&quot;custom&quot;:[&quot;baz&quot;]}}"></div>', $view->render());
124+
}
125+
126+
public function test_server_response_with_merge_props(): void
127+
{
128+
$request = Request::create('/user/123', 'GET');
129+
130+
$user = ['name' => 'Jonathan'];
131+
$response = new Response(
132+
'User/Edit',
133+
[
134+
'user' => $user,
135+
'foo' => new MergeProp('foo value'),
136+
'bar' => new MergeProp('bar value'),
137+
],
138+
'app',
139+
'123'
140+
);
141+
$response = $response->toResponse($request);
142+
$view = $response->getOriginalContent();
143+
$page = $view->getData()['page'];
144+
145+
$this->assertInstanceOf(BaseResponse::class, $response);
146+
$this->assertInstanceOf(View::class, $view);
147+
148+
$this->assertSame('User/Edit', $page['component']);
149+
$this->assertSame('Jonathan', $page['props']['user']['name']);
150+
$this->assertSame('/user/123', $page['url']);
151+
$this->assertSame('123', $page['version']);
152+
$this->assertFalse($page['clearHistory']);
153+
$this->assertFalse($page['encryptHistory']);
154+
$this->assertSame('<div id="app" data-page="{&quot;component&quot;:&quot;User\/Edit&quot;,&quot;props&quot;:{&quot;user&quot;:{&quot;name&quot;:&quot;Jonathan&quot;},&quot;foo&quot;:&quot;foo value&quot;,&quot;bar&quot;:&quot;bar value&quot;},&quot;url&quot;:&quot;\/user\/123&quot;,&quot;version&quot;:&quot;123&quot;,&quot;clearHistory&quot;:false,&quot;encryptHistory&quot;:false,&quot;mergeProps&quot;:[&quot;foo&quot;,&quot;bar&quot;]}"></div>', $view->render());
155+
}
156+
157+
public function test_server_response_with_defer_and_merge_props(): void
158+
{
159+
$request = Request::create('/user/123', 'GET');
160+
161+
$user = ['name' => 'Jonathan'];
162+
$response = new Response(
163+
'User/Edit',
164+
[
165+
'user' => $user,
166+
'foo' => (new DeferProp(function () {
167+
return 'foo value';
168+
}, 'default'))->merge(),
169+
'bar' => new MergeProp('bar value'),
170+
],
171+
'app',
172+
'123'
173+
);
174+
$response = $response->toResponse($request);
175+
$view = $response->getOriginalContent();
176+
$page = $view->getData()['page'];
177+
178+
$this->assertInstanceOf(BaseResponse::class, $response);
179+
$this->assertInstanceOf(View::class, $view);
180+
181+
$this->assertSame('User/Edit', $page['component']);
182+
$this->assertSame('Jonathan', $page['props']['user']['name']);
183+
$this->assertSame('/user/123', $page['url']);
184+
$this->assertSame('123', $page['version']);
185+
$this->assertFalse($page['clearHistory']);
186+
$this->assertFalse($page['encryptHistory']);
187+
$this->assertSame('<div id="app" data-page="{&quot;component&quot;:&quot;User\/Edit&quot;,&quot;props&quot;:{&quot;user&quot;:{&quot;name&quot;:&quot;Jonathan&quot;},&quot;bar&quot;:&quot;bar value&quot;},&quot;url&quot;:&quot;\/user\/123&quot;,&quot;version&quot;:&quot;123&quot;,&quot;clearHistory&quot;:false,&quot;encryptHistory&quot;:false,&quot;mergeProps&quot;:[&quot;foo&quot;,&quot;bar&quot;],&quot;deferredProps&quot;:{&quot;default&quot;:[&quot;foo&quot;]}}"></div>', $view->render());
188+
}
189+
54190
public function test_xhr_response(): void
55191
{
56192
$request = Request::create('/user/123', 'GET');

0 commit comments

Comments
 (0)