Skip to content

Commit 6c2e178

Browse files
authored
Merge pull request #80 from Lomkit/fix/multiple-rules-validation
🐛 double validation with hooks
2 parents 8552eaa + 530f94f commit 6c2e178

File tree

8 files changed

+55
-0
lines changed

8 files changed

+55
-0
lines changed

src/RestServiceProvider.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,15 @@
1515
use Lomkit\Rest\Console\Commands\ResourceCommand;
1616
use Lomkit\Rest\Console\Commands\ResponseCommand;
1717
use Lomkit\Rest\Contracts\QueryBuilder;
18+
use Lomkit\Rest\Http\Requests\ActionsRequest;
19+
use Lomkit\Rest\Http\Requests\DestroyRequest;
20+
use Lomkit\Rest\Http\Requests\DetailsRequest;
21+
use Lomkit\Rest\Http\Requests\ForceDestroyRequest;
22+
use Lomkit\Rest\Http\Requests\MutateRequest;
23+
use Lomkit\Rest\Http\Requests\OperateRequest;
24+
use Lomkit\Rest\Http\Requests\RestoreRequest;
25+
use Lomkit\Rest\Http\Requests\RestRequest;
26+
use Lomkit\Rest\Http\Requests\SearchRequest;
1827
use Lomkit\Rest\Query\Builder;
1928

2029
class RestServiceProvider extends ServiceProvider
@@ -124,5 +133,15 @@ protected function registerServices()
124133
{
125134
$this->app->singleton('lomkit-rest', Rest::class);
126135
$this->app->bind(QueryBuilder::class, Builder::class);
136+
137+
$this->app->singleton(RestRequest::class, RestRequest::class);
138+
$this->app->singleton(ActionsRequest::class, ActionsRequest::class);
139+
$this->app->singleton(DestroyRequest::class, DestroyRequest::class);
140+
$this->app->singleton(DetailsRequest::class, DetailsRequest::class);
141+
$this->app->singleton(ForceDestroyRequest::class, ForceDestroyRequest::class);
142+
$this->app->singleton(MutateRequest::class, MutateRequest::class);
143+
$this->app->singleton(OperateRequest::class, OperateRequest::class);
144+
$this->app->singleton(RestoreRequest::class, RestoreRequest::class);
145+
$this->app->singleton(SearchRequest::class, SearchRequest::class);
127146
}
128147
}

tests/Feature/Controllers/MutateCreateOperationsTest.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,36 @@ public function test_creating_a_resource_using_pivot_field_not_following_custom_
284284
$response->assertJsonStructure(['message', 'errors' => ['mutate.0.relations.belongsToManyRelation.0.pivot.number']]);
285285
}
286286

287+
public function test_creating_a_resource_with_unique_validation(): void
288+
{
289+
$modelToCreate = ModelFactory::new()->makeOne([
290+
'unique' => 'my unique string',
291+
]);
292+
Gate::policy(Model::class, GreenPolicy::class);
293+
Gate::policy(BelongsToManyRelation::class, GreenPolicy::class);
294+
$response = $this->post(
295+
'/api/models/mutate',
296+
[
297+
'mutate' => [
298+
[
299+
'operation' => 'create',
300+
'attributes' => [
301+
'unique' => $modelToCreate->unique,
302+
'name' => $modelToCreate->name,
303+
'number' => $modelToCreate->number,
304+
],
305+
],
306+
],
307+
],
308+
['Accept' => 'application/json']
309+
);
310+
311+
$this->assertMutatedResponse(
312+
$response,
313+
[$modelToCreate],
314+
);
315+
}
316+
287317
public function test_creating_a_resource(): void
288318
{
289319
$modelToCreate = ModelFactory::new()->makeOne();

tests/Support/Database/migrations/2023_04_00_000000_create_model_withs_table.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public function up()
1717
$table->string('name');
1818
$table->bigInteger('number');
1919
$table->string('string')->nullable();
20+
$table->string('unique')->unique()->nullable();
2021
$table->foreignIdFor(\Lomkit\Rest\Tests\Support\Models\BelongsToRelation::class)->nullable()->constrained();
2122
$table->timestamps();
2223
});

tests/Support/Database/migrations/2023_04_00_000000_create_models_table.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public function up()
1717
$table->string('name');
1818
$table->bigInteger('number');
1919
$table->string('string')->nullable();
20+
$table->string('unique')->unique()->nullable();
2021
$table->foreignIdFor(\Lomkit\Rest\Tests\Support\Models\BelongsToRelation::class)->nullable()->constrained();
2122
$table->nullableMorphs('morph_to_relation', 'morph_to_relation_index');
2223
$table->timestamps();

tests/Support/Rest/Resources/AutomaticGatingResource.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public function fields(RestRequest $request): array
3131
'name',
3232
'number',
3333
'string',
34+
'unique',
3435
];
3536
}
3637
}

tests/Support/Rest/Resources/ModelResource.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ public function fields(RestRequest $request): array
8282
'name',
8383
'number',
8484
'string',
85+
'unique',
8586
];
8687
}
8788

tests/Support/Rest/Resources/ModelWithResource.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public function fields(RestRequest $request): array
1818
'name',
1919
'number',
2020
'string',
21+
'unique',
2122
];
2223
}
2324

tests/Support/Rest/Resources/NoAuthorizationResource.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public function fields(RestRequest $request): array
2222
'name',
2323
'number',
2424
'string',
25+
'unique',
2526
];
2627
}
2728
}

0 commit comments

Comments
 (0)