Files
Test-Laravel-Validation/README.md
T

107 lines
4.2 KiB
Markdown
Raw Normal View History

2021-11-29 12:39:04 +02:00
## Test Your Laravel Validation Skills
2021-11-29 12:26:54 +02:00
2021-11-29 12:39:04 +02:00
This repository is a test for you: perform a set of tasks listed below, and fix the PHPUnit tests, which are currently intentionally failing.
2021-11-29 12:26:54 +02:00
2021-11-29 12:39:04 +02:00
To test if all the functions work correctly, there are PHPUnit tests in `tests/Feature/ValidationTest.php` file.
2021-11-29 12:26:54 +02:00
2021-11-29 12:39:04 +02:00
In the very beginning, if you run `php artisan test`, or `vendor/bin/phpunit`, all tests fail.
Your task is to make those tests pass.
2021-11-29 12:26:54 +02:00
2021-11-29 12:39:04 +02:00
## How to Submit Your Solution
2021-11-29 12:26:54 +02:00
2021-11-29 12:39:04 +02:00
If you want to submit your solution, you should make a Pull Request to the `main` branch.
It will automatically run the tests via GitHub Actions and will show you/me if the test pass.
2021-11-29 12:26:54 +02:00
2021-11-29 12:39:04 +02:00
If you don't know how to make a Pull Request, [here's my video with instructions](https://www.youtube.com/watch?v=vEcT6JIFji0).
2021-11-29 12:26:54 +02:00
2021-11-29 12:39:04 +02:00
This task is mostly self-served, so I'm not planning review or merge the Pull Requests. This test is for yourselves to assess your skills, the automated tests will be your answer if you passed the test :)
2021-11-29 12:26:54 +02:00
2021-11-29 12:39:04 +02:00
## Questions / Problems?
2021-11-29 12:26:54 +02:00
2021-11-29 12:39:04 +02:00
If you're struggling with some tasks, or you have suggestions how to improve the task, create a GitHub Issue.
2021-11-29 12:26:54 +02:00
2021-11-29 12:39:04 +02:00
Good luck!
2021-11-29 12:26:54 +02:00
2021-11-29 12:39:04 +02:00
---
2021-11-29 12:26:54 +02:00
2021-11-29 12:39:04 +02:00
## Task 1. Simple Validation Rules.
2021-11-29 12:26:54 +02:00
2021-11-29 12:39:04 +02:00
In `app/Http/Controllers/PostController.php` file, the `store()` method need validation rules: title should be required and unique.
2021-11-29 12:26:54 +02:00
2021-11-29 12:39:04 +02:00
Test method `test_simple_validation_rules()`.
2021-11-29 12:26:54 +02:00
2021-11-29 12:39:04 +02:00
---
2021-11-29 12:26:54 +02:00
2021-11-29 12:52:36 +02:00
## Task 2. Array Validation.
Imagine your form has fields as an array:
```
<input name="profile[name]" ... />
<input name="profile[email]" ... />
```
In `app/Http/Controllers/ProfileController.php` file, the `update()` method need validation rules: profile[name] and profile[email] fields should be required.
Test method `test_array_validation()`.
---
2021-11-29 13:17:49 +02:00
## Task 3. Showing Validation Errors.
In `resources/views/projects/create.blade.php` file, show the validation errors, for `"name" => "required", "description" => "required"` rules. Use whatever HTML structure you want, like `<ul><li>error</li><li>error 2</li></ul>`. No design needed, the test will just check if the error messages are present.
Test method `test_validation_errors_shown_in_blade()`.
---
2021-11-29 13:34:42 +02:00
## Task 4. Showing a Specific Validation Error.
In `resources/views/products/create.blade.php` file, show the validation error for `"name" => "required"`, using a specific Blade directive to show one specific error.
Test method `test_validation_specific_error_shown_in_blade()`.
---
2021-11-29 13:41:46 +02:00
## Task 5. Old Values Staying After Validation Error.
In `resources/views/teams/create.blade.php` file, the value of "name" field should remain in the form, after failed validation. Change the Blade file so that it would show old value.
Test method `test_old_value_stays_in_form_after_validation_error()`.
---
2021-11-29 15:21:45 +02:00
## Task 6. Form Request Validation.
2023-09-22 12:33:35 +01:00
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/description as required fields.
2021-11-29 15:21:45 +02:00
Test method `test_form_request_validation()`.
---
2021-11-29 15:31:28 +02:00
## Task 7. Update Forbidden Field.
In `app/Http/Controllers/UserController.php` file, in `update` method, the code updates all the fields. But users.is_admin should not be updated, even if it's passed via the request. Change the line with `$request->all()` to avoid this security issue of updating the admin.
Test method `test_update_forbidden_field()`.
---
2021-11-29 15:47:54 +02:00
## Task 8. Customize Validation Messages.
In `app/Http/Controllers/BuildingController.php` file, in `store` method, the code uses `StoreBuildingRequest` Form Request class. Change that class to customize the validation rule for "name" field as "required", to show message "Please enter the name" instead of the default "The field name is required".
Test method `test_custom_error_message()`.
---
2021-11-29 16:06:54 +02:00
## Task 9. Your Own Validation Rule.
2021-12-01 15:14:00 +01:00
In `app/Http/Controllers/ArticleController.php` file, in `store` method, the code uses `Uppercase` validation rule that you need to create with Artisan command, and fill in with the rule of "title" having first letter as uppercase with the error message "The title does not start with an uppercased letter".
2021-11-29 16:06:54 +02:00
Test method `test_custom_validation_rule()`.
---