Skip to content

hbhossein/Test-Laravel-Eloquent-Basics

 
 

Repository files navigation

Test Your Laravel Eloquent Basic Skills

This repository is a test for you: perform a set of tasks listed below, and fix the PHPUnit tests, which are currently intentionally failing.

To test if all the functions work correctly, there are PHPUnit tests in tests/Feature/EloquentTest.php file.

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.

How to Submit Your Solution

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.

If you don't know how to make a Pull Request, here's my video with instructions.

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 :)

Questions / Problems?

If you're struggling with some tasks, or you have suggestions how to improve the task, create a GitHub Issue.

Good luck!


Task 1. Model with Different Table Name.

In app/Models/Morningnews.php file, change it so that the model would work with "morning_news" table, as it is created in the migrations.

Test method test_create_model_incorrect_table().


Task 2. Get Data List.

In app/Http/Controllers/UserController.php file method index(), write Eloquent query to get 3 newest users with verified emails, ordered from newest to oldest. Transform this SQL query into Eloquent:

select * from users where email_verified_at is not null order by created_at desc limit 3

Test method test_get_filtered_list().


Task 3. Get a Single Record.

In app/Http/Controllers/UserController.php file method show($userId), fill in the $user value with finding the user by users.id = $userId. If the user is not found, show default Laravel 404 page.

Test method test_find_user_or_show_404_page().


Task 4. Get a Single Record or Create a New Record.

In app/Http/Controllers/UserController.php file method check_create(), find the user by name and email. If the user is not found, create it (with random password).

Test method test_check_or_create_user().


Task 5. Create a New Record.

In app/Http/Controllers/ProjectController.php file method store(), creating the project will fail. Fix the underlying issue, to make it work.

Test method test_create_project().


Task 6. Mass Update.

In app/Http/Controllers/ProjectController.php file method mass_update(), write the update SQL query as Eloquent statement.

update projects set name = $request->new_name where name = $request->old_name

Test method test_mass_update_projects().


Task 7. Update or New Record.

In app/Http/Controllers/UserController.php file method check_update(), find a user by $name and update it with $email. If not found, create a user with $name, $email and random password

Test method test_check_or_update_user().


Task 8. Mass Delete Users.

In app/Http/Controllers/UserController.php file method destroy(), delete all users by the array of $request->users

Test method test_mass_delete_users().


Task 9. Soft Deletes.

In app/Http/Controllers/ProjectController.php file method destroy(), change Eloquent statement to still return the soft-deleted records in the list of $projects

Test method test_soft_delete_projects().


Task 10. Scopes with Filters.

In app/Http/Controllers/UserController.php file method only_active(), make the main statement work and to filter records where email_verified_at is not null.

Test method test_active_users().


Task 11. Observers with New Record.

In app/Http/Controllers/ProjectController.php file method store_with_stats(), create a separate Observer file with an event to perform a +1 in the stats table.

Test method test_insert_observer().


About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • PHP 82.8%
  • Blade 16.4%
  • Shell 0.8%