Skip to content

Commit 01a82b1

Browse files
authored
Merge pull request #95 from rodrigopedra/master
Call Callable before checking for Responsable
2 parents 10c5a42 + b193cce commit 01a82b1

File tree

2 files changed

+54
-1
lines changed

2 files changed

+54
-1
lines changed

src/Response.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@ public function toResponse($request)
5959
array_walk_recursive($props, function (&$prop) use ($request) {
6060
if ($prop instanceof Closure) {
6161
$prop = App::call($prop);
62-
} else if ($prop instanceof Responsable) {
62+
}
63+
64+
if ($prop instanceof Responsable) {
6365
$prop = $prop->toResponse($request)->getData();
6466
}
6567
});

tests/ResponseTest.php

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,13 @@
55
use Inertia\Response;
66
use Illuminate\View\View;
77
use Illuminate\Http\Request;
8+
use Illuminate\Support\Fluent;
89
use Illuminate\Http\JsonResponse;
10+
use Illuminate\Support\Collection;
911
use Illuminate\Http\Response as BaseResponse;
12+
use Illuminate\Pagination\LengthAwarePaginator;
1013
use Illuminate\Http\Resources\Json\JsonResource;
14+
use Illuminate\Http\Resources\Json\ResourceCollection;
1115

1216
class ResponseTest extends TestCase
1317
{
@@ -74,4 +78,51 @@ public function toArray($request)
7478
$this->assertSame('/user/123', $page->url);
7579
$this->assertSame('123', $page->version);
7680
}
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+
}
77128
}

0 commit comments

Comments
 (0)