From ccb91e35fb3142d653dc4046282377b3739a258a Mon Sep 17 00:00:00 2001 From: PovilasKorop Date: Mon, 29 Nov 2021 15:21:45 +0200 Subject: [PATCH] Task 6 - form request validation --- README.md | 8 +++++ app/Http/Controllers/ItemController.php | 20 +++++++++++ app/Models/Item.php | 13 ++++++++ .../2021_11_29_131147_create_items_table.php | 33 +++++++++++++++++++ routes/web.php | 1 + tests/Feature/ValidationTest.php | 14 ++++++++ 6 files changed, 89 insertions(+) create mode 100644 app/Http/Controllers/ItemController.php create mode 100644 app/Models/Item.php create mode 100644 database/migrations/2021_11_29_131147_create_items_table.php diff --git a/README.md b/README.md index 9d390a8..6a1d26b 100644 --- a/README.md +++ b/README.md @@ -72,3 +72,11 @@ Test method `test_old_value_stays_in_form_after_validation_error()`. --- +## Task 6. Form Request Validation. + +In `app/Http/Controllers/ItemController.php` file, validation is performed via class StoreItemRequest, but that class doesn't exist, intentionally. Your task is to create it, with parameters of authorized true, and validation rules of name/title as required fields. + +Test method `test_form_request_validation()`. + +--- + diff --git a/app/Http/Controllers/ItemController.php b/app/Http/Controllers/ItemController.php new file mode 100644 index 0000000..7c8082a --- /dev/null +++ b/app/Http/Controllers/ItemController.php @@ -0,0 +1,20 @@ +validated()); + + return 'Success'; + } + +} diff --git a/app/Models/Item.php b/app/Models/Item.php new file mode 100644 index 0000000..edd4d7a --- /dev/null +++ b/app/Models/Item.php @@ -0,0 +1,13 @@ +id(); + $table->string('name'); + $table->string('description'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('items'); + } +} diff --git a/routes/web.php b/routes/web.php index 9bb7af2..190ffdc 100644 --- a/routes/web.php +++ b/routes/web.php @@ -18,6 +18,7 @@ Route::post('profile', [\App\Http\Controllers\ProfileController::class, 'update' Route::resource('projects', \App\Http\Controllers\ProjectController::class); Route::resource('products', \App\Http\Controllers\ProductController::class); Route::resource('teams', \App\Http\Controllers\TeamController::class); +Route::resource('items', \App\Http\Controllers\ItemController::class); Route::get('/', function () { return view('welcome'); diff --git a/tests/Feature/ValidationTest.php b/tests/Feature/ValidationTest.php index 450f064..4ff254d 100644 --- a/tests/Feature/ValidationTest.php +++ b/tests/Feature/ValidationTest.php @@ -67,4 +67,18 @@ class ValidationTest extends TestCase $response->assertStatus(200); $response->assertSee('Abc'); } + + public function test_form_request_validation() + { + // Post with no name/description should fail + $response = $this->post('items'); + $response->assertStatus(302); + + // Post with all the fields should succeed + $response = $this->post('items', [ + 'name' => 'Abc', + 'description' => 'Xyz', + ]); + $response->assertStatus(200); + } }