Skip to content

Commit 72be19d

Browse files
fix: Bulk update validation now reports correct error indices (#715)
1 parent 5a91ad6 commit 72be19d

3 files changed

Lines changed: 26 additions & 8 deletions

File tree

src/Http/Controllers/RepositoryUpdateBulkController.php

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ class RepositoryUpdateBulkController extends RepositoryController
1010
{
1111
public function __invoke(RepositoryUpdateBulkRequest $request)
1212
{
13+
$request->repository()->allowToUpdateBulk($request);
14+
1315
$collection = DB::transaction(function () use ($request) {
1416
return $request->collectInput()
1517
->each(function (array $item, int $row) use ($request) {
@@ -20,13 +22,7 @@ public function __invoke(RepositoryUpdateBulkRequest $request)
2022
/** * @var Repository $repository */
2123
$repository = $request->repositoryWith($model);
2224

23-
return $repository
24-
->allowToUpdateBulk($request, $item)
25-
->updateBulk(
26-
$request,
27-
$id,
28-
$row
29-
);
25+
return $repository->updateBulk($request, $id, $row);
3026
});
3127
});
3228

src/Repositories/ValidatingTrait.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ public static function validatorForUpdateBulk(RestifyRequest $request, $resource
176176
})->toArray();
177177

178178
return Validator::make(
179-
[$plainPayload] ?? $request->all(),
179+
$plainPayload ?? $request->all(),
180180
$on->getUpdatingBulkRules($request),
181181
$messages
182182
)->after(function ($validator) use ($request) {

tests/Controllers/RepositoryUpdateBulkControllerTest.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,26 @@ public function test_basic_update_works(): void
5959
$this->assertEquals($updatedPost->title, 'Updated first title');
6060
$this->assertEquals($updatedPost2->title, 'Updated second title');
6161
}
62+
63+
public function test_bulk_update_validation_reports_correct_indices(): void
64+
{
65+
$posts = Post::factory()
66+
->count(3)
67+
->sequence(
68+
['title' => 'First title'],
69+
['title' => 'Second title'],
70+
['title' => 'Third title'],
71+
)
72+
->create(['user_id' => 1]);
73+
74+
$response = $this->postJson(PostRepository::route('bulk/update'), [
75+
['id' => $posts[0]->id, 'title' => 'Valid updated title'], // Valid (index 0)
76+
['id' => $posts[1]->id, 'title' => null], // Invalid (index 1)
77+
['id' => $posts[2]->id, 'title' => null], // Invalid (index 2)
78+
]);
79+
80+
$response->assertUnprocessable();
81+
$response->assertJsonValidationErrors(['1.title', '2.title']);
82+
$response->assertJsonMissingValidationErrors(['0.title']);
83+
}
6284
}

0 commit comments

Comments
 (0)