@@ -165,6 +165,41 @@ public function test_server_response_with_merge_props(): void
165165 $ this ->assertSame ('<div id="app" data-page="{"component":"User\/Edit","props":{"user":{"name":"Jonathan"},"foo":"foo value","bar":"bar value"},"url":"\/user\/123","version":"123","clearHistory":false,"encryptHistory":false,"mergeProps":["foo","bar"]}"></div> ' , $ view ->render ());
166166 }
167167
168+ public function test_server_response_with_deep_merge_props (): void
169+ {
170+ $ request = Request::create ('/user/123 ' , 'GET ' );
171+
172+ $ user = ['name ' => 'Jonathan ' ];
173+ $ response = new Response (
174+ 'User/Edit ' ,
175+ [
176+ 'user ' => $ user ,
177+ 'foo ' => (new MergeProp ('foo value ' ))->deepMerge (),
178+ 'bar ' => (new MergeProp ('bar value ' ))->deepMerge (),
179+ ],
180+ 'app ' ,
181+ '123 '
182+ );
183+ $ response = $ response ->toResponse ($ request );
184+ $ view = $ response ->getOriginalContent ();
185+ $ page = $ view ->getData ()['page ' ];
186+
187+ $ this ->assertInstanceOf (BaseResponse::class, $ response );
188+ $ this ->assertInstanceOf (View::class, $ view );
189+
190+ $ this ->assertSame ('User/Edit ' , $ page ['component ' ]);
191+ $ this ->assertSame ('Jonathan ' , $ page ['props ' ]['user ' ]['name ' ]);
192+ $ this ->assertSame ('/user/123 ' , $ page ['url ' ]);
193+ $ this ->assertSame ('123 ' , $ page ['version ' ]);
194+ $ this ->assertSame ([
195+ 'foo ' ,
196+ 'bar ' ,
197+ ], $ page ['deepMergeProps ' ]);
198+ $ this ->assertFalse ($ page ['clearHistory ' ]);
199+ $ this ->assertFalse ($ page ['encryptHistory ' ]);
200+ $ this ->assertSame ('<div id="app" data-page="{"component":"User\/Edit","props":{"user":{"name":"Jonathan"},"foo":"foo value","bar":"bar value"},"url":"\/user\/123","version":"123","clearHistory":false,"encryptHistory":false,"deepMergeProps":["foo","bar"]}"></div> ' , $ view ->render ());
201+ }
202+
168203 public function test_server_response_with_defer_and_merge_props (): void
169204 {
170205 $ request = Request::create ('/user/123 ' , 'GET ' );
@@ -205,6 +240,46 @@ public function test_server_response_with_defer_and_merge_props(): void
205240 $ this ->assertSame ('<div id="app" data-page="{"component":"User\/Edit","props":{"user":{"name":"Jonathan"},"bar":"bar value"},"url":"\/user\/123","version":"123","clearHistory":false,"encryptHistory":false,"mergeProps":["foo","bar"],"deferredProps":{"default":["foo"]}}"></div> ' , $ view ->render ());
206241 }
207242
243+ public function test_server_response_with_defer_and_deep_merge_props (): void
244+ {
245+ $ request = Request::create ('/user/123 ' , 'GET ' );
246+
247+ $ user = ['name ' => 'Jonathan ' ];
248+ $ response = new Response (
249+ 'User/Edit ' ,
250+ [
251+ 'user ' => $ user ,
252+ 'foo ' => (new DeferProp (function () {
253+ return 'foo value ' ;
254+ }, 'default ' ))->deepMerge (),
255+ 'bar ' => (new MergeProp ('bar value ' ))->deepMerge (),
256+ ],
257+ 'app ' ,
258+ '123 '
259+ );
260+ $ response = $ response ->toResponse ($ request );
261+ $ view = $ response ->getOriginalContent ();
262+ $ page = $ view ->getData ()['page ' ];
263+
264+ $ this ->assertInstanceOf (BaseResponse::class, $ response );
265+ $ this ->assertInstanceOf (View::class, $ view );
266+
267+ $ this ->assertSame ('User/Edit ' , $ page ['component ' ]);
268+ $ this ->assertSame ('Jonathan ' , $ page ['props ' ]['user ' ]['name ' ]);
269+ $ this ->assertSame ('/user/123 ' , $ page ['url ' ]);
270+ $ this ->assertSame ('123 ' , $ page ['version ' ]);
271+ $ this ->assertSame ([
272+ 'default ' => ['foo ' ],
273+ ], $ page ['deferredProps ' ]);
274+ $ this ->assertSame ([
275+ 'foo ' ,
276+ 'bar ' ,
277+ ], $ page ['deepMergeProps ' ]);
278+ $ this ->assertFalse ($ page ['clearHistory ' ]);
279+ $ this ->assertFalse ($ page ['encryptHistory ' ]);
280+ $ this ->assertSame ('<div id="app" data-page="{"component":"User\/Edit","props":{"user":{"name":"Jonathan"},"bar":"bar value"},"url":"\/user\/123","version":"123","clearHistory":false,"encryptHistory":false,"deepMergeProps":["foo","bar"],"deferredProps":{"default":["foo"]}}"></div> ' , $ view ->render ());
281+ }
282+
208283 public function test_xhr_response (): void
209284 {
210285 $ request = Request::create ('/user/123 ' , 'GET ' );
0 commit comments