|
5 | 5 | use Inertia\Response;
|
6 | 6 | use Illuminate\View\View;
|
7 | 7 | use Illuminate\Http\Request;
|
| 8 | +use Illuminate\Support\Fluent; |
8 | 9 | use Illuminate\Http\JsonResponse;
|
| 10 | +use Illuminate\Support\Collection; |
9 | 11 | use Illuminate\Http\Response as BaseResponse;
|
| 12 | +use Illuminate\Pagination\LengthAwarePaginator; |
10 | 13 | use Illuminate\Http\Resources\Json\JsonResource;
|
| 14 | +use Illuminate\Http\Resources\Json\ResourceCollection; |
11 | 15 |
|
12 | 16 | class ResponseTest extends TestCase
|
13 | 17 | {
|
@@ -74,4 +78,51 @@ public function toArray($request)
|
74 | 78 | $this->assertSame('/user/123', $page->url);
|
75 | 79 | $this->assertSame('123', $page->version);
|
76 | 80 | }
|
| 81 | + |
| 82 | + public function test_callable_resource_response() |
| 83 | + { |
| 84 | + $request = Request::create('/users', 'GET', ['page' => 1]); |
| 85 | + $request->headers->add(['X-Inertia' => 'true']); |
| 86 | + |
| 87 | + $users = Collection::make([ |
| 88 | + new Fluent(['name' => 'Jonathan']), |
| 89 | + new Fluent(['name' => 'Taylor']), |
| 90 | + new Fluent(['name' => 'Jeffrey']), |
| 91 | + ]); |
| 92 | + |
| 93 | + $callable = function () use ($users) { |
| 94 | + $page = new LengthAwarePaginator($users->take(2), $users->count(), 2); |
| 95 | + |
| 96 | + return new class($page, JsonResource::class) extends ResourceCollection {}; |
| 97 | + }; |
| 98 | + |
| 99 | + $response = new Response('User/Index', ['users' => $callable], 'app', '123'); |
| 100 | + $response = $response->toResponse($request); |
| 101 | + $page = $response->getData(); |
| 102 | + |
| 103 | + $expected = [ |
| 104 | + 'data' => $users->take(2), |
| 105 | + 'links' => [ |
| 106 | + 'first' => '/?page=1', |
| 107 | + 'last' => '/?page=2', |
| 108 | + 'prev' => null, |
| 109 | + 'next' => '/?page=2', |
| 110 | + ], |
| 111 | + 'meta' => [ |
| 112 | + 'current_page'=> 1, |
| 113 | + 'from'=> 1, |
| 114 | + 'last_page'=> 2, |
| 115 | + 'path'=> '/', |
| 116 | + 'per_page'=> 2, |
| 117 | + 'to'=> 2, |
| 118 | + 'total'=> 3, |
| 119 | + ], |
| 120 | + ]; |
| 121 | + |
| 122 | + $this->assertInstanceOf(JsonResponse::class, $response); |
| 123 | + $this->assertSame('User/Index', $page->component); |
| 124 | + $this->assertSame(\json_encode($expected), \json_encode($page->props->users)); |
| 125 | + $this->assertSame('/users?page=1', $page->url); |
| 126 | + $this->assertSame('123', $page->version); |
| 127 | + } |
77 | 128 | }
|
0 commit comments