Репозиторий служит целью проверки знаний основ фреймворка laravel, в рамках тем указанных в roadmap здесь: CutCode Junior Roadmap
Цель создания такого тестирования было охватить базовые разделы laravel и научиться на практике покрывать тестами проект на laravel.
Для начала необходимо развернуть проект на котором будут выполняться тесты.
composer install
php artisan key:generate
- .env с реквизитами mysql базы данных
- КРАЙНЕ ВАЖНО ЧТОБЫ БАЗА ДАННЫХ НАЗЫВАЛАСЬ laravel_skill_test
- php >= 7.3
- mysql
php artisan test --filter MigrationsTest
php artisan test --filter RouteTest
php artisan test --filter BladeTest
php artisan test --filter ModelTest
php artisan test --filter ValidationTest
php artisan test --filter AuthTest
php artisan test
Искать задачи можно по фильтру TODO в IDE (игнорируя директорию /storage), либо по списку заданий
PR в ветку master (автоматически запустит тест проверки)
Все задания находятся здесь database/migrations/tasks
- Тесты
tests/Feature/MigrationsTest.php
- Запуск
php artisan test --filter MigrationsTest
Создать в базе данных таблицу categories с 2 полями id и title (не забыть про timestamps)
Для title указать что значение по умолчанию NULL
Для active указать что значение по умолчанию TRUE
Добавить функционал soft delete
Добавить поля с timestamps (created_at, updated_at) через 1 метод
Добавить поле description типа text (DEFAULT NULL) ПОСЛЕ поля title
Сделать провеку на наличие поля active и в случаи успеха добавить поле main (boolean default false)
Переименовать поле title в name
Переименовать таблицу posts в articles
Добавить таблицу для связи articles и categories (belongsToMany) c foreign ключами
Все задания находятся здесь routes/web.php
и routes/api.php
- Тесты
tests/Feature/RouteTest.php
- Запуск
php artisan test --filter RouteTest
По GET урлу /hello отобразить view - /resources/views/hello.blade (без контроллера)
По GET урлу / обратиться к IndexController, метод index
По GET урлу /page/contact отобразить view - /resources/views/pages/contact.blade с наименованием роута - contact
По GET урлу /users/[id] обратиться к UserController -> метод show без Route Model Binding. Только параметр id
По GET урлу /users/bind/[user] обратиться к UserController -> метод showBind но в данном случае используем Route Model Binding. Параметр user
Выполнить редирект с урла /bad на урл /good
Добавить роут на ресурс контроллер - UserCrudController с урлом - /users_crud
Организовать группу роутов (Route::group()) объединенных префиксом - dashboard
Добавить роут GET /admin -> Admin/IndexController -> index
Добавить роут POST /admin/post -> Admin/IndexController -> post
Организовать группу роутов (Route::group()) объединенных префиксом - security и мидлваром auth
Добавить роут GET /admin/auth -> Admin/IndexController -> auth
Добавить apiResource контроллер - Api/V1/UserController
- Префикс урла должен быть /api/v1
- Полный урл /api/v1/users (не забывайте что это api routes)
- Тесты
tests/Feature/BladeTest.php
- Запуск
php artisan test --filter BladeTest
Http/Controllers/IndexController.php
Передайте users во view (название ключа users)
resources/views/table.blade.php
Изменить реализацию этой view, расширить ее с использованием layout
resources/views/layouts/app.blade.php
Подключите view с меню shared/menu.blade.php
resources/views/auth.blade.php
Сделать проверку авторизован пользователь или нет.
Если да то вывести ID пользователя.
ID пользователя вывести внутри конструкции с проверкой
resources/views/welcome.blade.php
Сделать blade component с названием HelloWorld с содержимым во view - Текущая дата в формате Y-m-d.
- Обязательное условие добавить регистрацию компонента в AppServiceProvider и изменить его alias на hello
- В итоге alias - hello а класс компонента App\View\Components\HelloWorld
- Вывести его в указаном месте
resources/views/table.blade.php
В эту view с контроллера передается collection c users в переменной data.
- Выполнить foreach loop в одну строку (специальная директива)
- Используйте view shared/user.blade.php для item (переменная user во item view)
- Используйте view shared/empty.blade.php для состояния когда нет элементов
resources/views/table.blade.php
Здесь сделайте классический foreach loop
- Выведите div с $user->name
- Воспользуйтесь переменной $loop и у нечетных div выведите класс -
bg-red-500
- Тесты
tests/Feature/ModelTest.php
- Запуск
php artisan test --filter ModelTest
Models/Item.php
Указать что таблица у модели - products
Http/Controllers/EloquentController.php
С помощью модели Item реализовать запрос
select * from products where active = true order by created_at desc limit 3
Http/Controllers/EloquentController.php
Добавить в модель Item scope для фильтрации активных продуктов (scopeActive())
Http/Controllers/EloquentController.php
Найти Item по id и передать во view либо отдать 404 страницу
Http/Controllers/EloquentController.php
Выполнить простое добавление новой записи
Http/Controllers/EloquentController.php
Выполнить простое обновление записи
Http/Controllers/EloquentController.php
Выполнить массовое удаление записей
- Тесты
tests/Feature/ValidationTest.php
- Запуск
php artisan test --filter ValidationTest
Http/Requests/ItemStoreRequest.php
Добавить правила валидации для поля title
- Поле обязательно
- Строковое
- Минимам 5 символов
- Максимум 15 символов
- Тесты
tests/Feature/AuthTest.php
- Запуск
php artisan test --filter AuthTest
Policies/ItemPolicy.php
Разрешить добавление продуктов только пользователю с id = 10
Есть предложения? Возникли какие-либо проблемы? Не стестняйтесь и пишите GitHub Issues.
Желаю всем удачи!