Coder Social home page Coder Social logo

test-laravel-eloquent-basics's Introduction

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().


test-laravel-eloquent-basics's People

Contributors

krekas avatar povilaskorop avatar thinkverse avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

test-laravel-eloquent-basics's Issues

Task 7 - update or new record

Test 7 may be solved with both

$password = bcrypt('password');
$user = User::updateOrCreate(compact('name', 'email'), compact('password'));

and

$password = bcrypt('password');
$user = User::updateOrCreate(compact('name'), compact('email', 'password'));

which should not be accepted, according to the task.

Indeed, the former creates a new record during the test,
whilst the latter updates the password even if the record is found.

I've created this PR #159 to improve the tests (which of course fails the tests on GitHub because it has just the test fix).

P.S. I then noticed that #89 and #119 are related.
Also, in #89 this PR #56 is referenced to fix the issue too (and the are changes very similar).

tests passed on local but not on the GH actions

I'm getting this error when I open the PR
Run composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
shell: /usr/bin/bash -e {0}
Your lock file does not contain a compatible set of packages. Please run composer update.
Error: Process completed with exit code 2.

Although I have run composer update and composer install
can anyone tell me what should I do?

## Task 7. Update or New Record.

// TASK: find a user by $name and update it with $email
// if not found, create a user with $name, $email and random password

$user = User::updateOrCreate(
    ['name' => $name],
    ['email' => $email, 'password' => bcrypt(Str::random(8))]
);

Laravel updateOrCreate doesn't have a 3rd argument - the password will be updated every time with email and pass the test

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.