diff --git a/src/Http/Requests/DestroyRequest.php b/src/Http/Requests/DestroyRequest.php index a180064..4bfcc7e 100644 --- a/src/Http/Requests/DestroyRequest.php +++ b/src/Http/Requests/DestroyRequest.php @@ -2,6 +2,7 @@ namespace Lomkit\Rest\Http\Requests; +use Illuminate\Validation\Rule; use Lomkit\Rest\Http\Resource; class DestroyRequest extends RestRequest @@ -32,10 +33,16 @@ public function rules() */ public function destroyRules(Resource $resource) { + $model = $resource::newModel(); + return [ 'resources' => [ 'required', 'array', ], + 'resources.*' => [ + 'distinct', + Rule::exists($model->getTable(), $model->getKeyName()), + ], ]; } } diff --git a/tests/Feature/Controllers/DeleteOperationsTest.php b/tests/Feature/Controllers/DeleteOperationsTest.php index cb577d1..b60b4c6 100644 --- a/tests/Feature/Controllers/DeleteOperationsTest.php +++ b/tests/Feature/Controllers/DeleteOperationsTest.php @@ -56,6 +56,28 @@ public function test_deleting_a_non_authorized_model_with_an_authorized_one(): v $this->assertDatabaseHas('models', $modelDeletable->only('id')); } + public function test_deleting_a_non_existing_model(): void + { + $model = ModelFactory::new()->count(1)->createOne(); + + Gate::policy(Model::class, GreenPolicy::class); + + $response = $this->delete( + '/api/models', + [ + 'resources' => [ + 999999, + $model->getKey(), + ], + ], + ['Accept' => 'application/json'] + ); + + $response->assertStatus(422); + $response->assertExactJsonStructure(['message', 'errors' => ['resources.0']]); + $this->assertDatabaseHas('models', $model->only('id')); + } + public function test_deleting_a_model(): void { $model = ModelFactory::new()->count(1)->createOne();