|
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;
|
@@ -584,6 +585,31 @@ public function test_lazy_props_are_included_in_partial_reload(): void
|
584 | 585 | $this->assertSame('A lazy value', $page->props->lazy);
|
585 | 586 | }
|
586 | 587 |
|
| 588 | + public function test_defer_arrayable_props_are_resolved_in_partial_reload(): void |
| 589 | + { |
| 590 | + $request = Request::create('/users', 'GET'); |
| 591 | + $request->headers->add(['X-Inertia' => 'true']); |
| 592 | + $request->headers->add(['X-Inertia-Partial-Component' => 'Users']); |
| 593 | + $request->headers->add(['X-Inertia-Partial-Data' => 'defer']); |
| 594 | + |
| 595 | + $deferProp = new DeferProp(function () { |
| 596 | + return new class implements Arrayable |
| 597 | + { |
| 598 | + public function toArray() |
| 599 | + { |
| 600 | + return ['foo' => 'bar']; |
| 601 | + } |
| 602 | + }; |
| 603 | + }); |
| 604 | + |
| 605 | + $response = new Response('Users', ['users' => [], 'defer' => $deferProp], 'app', '123'); |
| 606 | + $response = $response->toResponse($request); |
| 607 | + $page = $response->getData(); |
| 608 | + |
| 609 | + $this->assertFalse(property_exists($page->props, 'users')); |
| 610 | + $this->assertEquals((object) ['foo' => 'bar'], $page->props->defer); |
| 611 | + } |
| 612 | + |
587 | 613 | public function test_always_props_are_included_on_partial_reload(): void
|
588 | 614 | {
|
589 | 615 | $request = Request::create('/user/123', 'GET');
|
|
0 commit comments