|
2 | 2 |
|
3 | 3 | namespace Inertia\Tests;
|
4 | 4 |
|
| 5 | +use Illuminate\Contracts\Support\Arrayable; |
5 | 6 | use Illuminate\Http\JsonResponse;
|
6 | 7 | use Illuminate\Http\Request;
|
7 | 8 | use Illuminate\Http\Resources\Json\JsonResource;
|
@@ -659,6 +660,31 @@ public function test_lazy_props_are_included_in_partial_reload(): void
|
659 | 660 | $this->assertSame('A lazy value', $page->props->lazy);
|
660 | 661 | }
|
661 | 662 |
|
| 663 | + public function test_defer_arrayable_props_are_resolved_in_partial_reload(): void |
| 664 | + { |
| 665 | + $request = Request::create('/users', 'GET'); |
| 666 | + $request->headers->add(['X-Inertia' => 'true']); |
| 667 | + $request->headers->add(['X-Inertia-Partial-Component' => 'Users']); |
| 668 | + $request->headers->add(['X-Inertia-Partial-Data' => 'defer']); |
| 669 | + |
| 670 | + $deferProp = new DeferProp(function () { |
| 671 | + return new class implements Arrayable |
| 672 | + { |
| 673 | + public function toArray() |
| 674 | + { |
| 675 | + return ['foo' => 'bar']; |
| 676 | + } |
| 677 | + }; |
| 678 | + }); |
| 679 | + |
| 680 | + $response = new Response('Users', ['users' => [], 'defer' => $deferProp], 'app', '123'); |
| 681 | + $response = $response->toResponse($request); |
| 682 | + $page = $response->getData(); |
| 683 | + |
| 684 | + $this->assertFalse(property_exists($page->props, 'users')); |
| 685 | + $this->assertEquals((object) ['foo' => 'bar'], $page->props->defer); |
| 686 | + } |
| 687 | + |
662 | 688 | public function test_always_props_are_included_on_partial_reload(): void
|
663 | 689 | {
|
664 | 690 | $request = Request::create('/user/123', 'GET');
|
|
0 commit comments