Giter VIP home page Giter VIP logo

laravel-test's Introduction

Тестовое задание

Текст задания

Laravel

  • Завести новый проект.
  • С помощью фабрики создать 10 пользователей.
  • В контроллере отдавать список пользоватей
  • для сущности User добавить поле description, в которое выводить список навыков в разных комбинациях с использованием паттерна Декоратор (реализации применять рандомно). Варианты навыков: ['php', 'js', 'golang', 'java']
  • Написать тестовый метод, который проверит, что контроллером отдается список пользователей с непустым массивом навыков

Vue/React

  • Сделать список пользователей с навыками.
  • Добавить форму создания нового пользователя с валидацией имени (либо только цифры не более 12 символов, либо только буквы в обоих регистрах)

Полностью рабочее приложение не нужно. Я буду смотреть на код.

devops

  • На гитхабе создать репозиторий и в файле Readme.md описать процесс деплоя сделанного приложения на компьютере, чтобы я мог его задеплоить

Реализация

Для модели User создается через доп. миграцию и заполняется через UserSeeder текстовое поле description, со списоком Навыков, разделенных запятой, для чего создан специальный метод возвращающий Attribute. Так же создается бонусный 11-й пользователь с именем Junior с пустым полем description если при генерации таковых не будет.

Паттерн Декоратор реализован следующим способом: В контроллере модель User передается декорирующему классу UserWithDescription, который перегенирирует список навыков для экземляра User.

В контроллере UserController.php на 24 и 27 строках реализованы передача коллекции (Collection) пользователей в UsersResource двумя способами: как через User так и через декорирующий класс.

Если запускать тесты (см п 5) для каждой из реализаций, то можно увидеть, что тесты выдают ошибку в случае работы с моделью User и мы увидем ID пользователя у которого пустое поле description. При запуске через декорирующий класс такое исключено.

Установка

Развертывание кода реализовано при помощи образов Docker и Laravel Sail.

Требования

  • Тестировалось на Ubuntu 24.04 и Windows 10 с установленной и настроенной WSL 2
  • Работающий docker, проверка (docker run hello-world)

Команды процесса установки

  1. Создание папки с проектом и клонированеие репозитория
mkdir PROJECT_FOLDER
cd PROJECT_FOLDER
git clone https://github.com/alexeyinprime/laravel-test.git .
  1. Создание файла конфигурации .env в корневой папке проекта
APP_NAME=LaravelTest
APP_ENV=local
APP_KEY=base64:Jsrh0+BQaVXJpCSGeME02gwpo4zWny8nMa4HQjHeNek=
APP_DEBUG=true
APP_TIMEZONE=UTC
APP_URL=http://localhost
APP_LOCALE=en
APP_FALLBACK_LOCALE=en
APP_FAKER_LOCALE=en_US
APP_MAINTENANCE_DRIVER=file
APP_MAINTENANCE_STORE=database
BCRYPT_ROUNDS=12
LOG_CHANNEL=stack
LOG_STACK=single
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug
DB_CONNECTION=sqlite
DB_DATABASE="/var/www/html/database/database.sqlite"
DB_FOREIGN_KEYS=false

SESSION_DRIVER=database
SESSION_LIFETIME=120
SESSION_ENCRYPT=false
SESSION_PATH=/
SESSION_DOMAIN=null

BROADCAST_CONNECTION=log
FILESYSTEM_DISK=local
QUEUE_CONNECTION=database

CACHE_STORE=database
CACHE_PREFIX=

VITE_APP_NAME="${APP_NAME}"
  1. Выполнение установки docker образа Laravel Sail
docker run --rm     -u "$(id -u):$(id -g)"     -v "$(pwd):/var/www/html" \
    -w /var/www/html     laravelsail/php83-composer:latest  \
       composer install --ignore-platform-reqs
  1. Запуск docker контейнера с кодом проекта и выполнение инициализации БД
./vendor/bin/sail up -d

./vendor/bin/sail artisan migrate --force
./vendor/bin/sail artisan db:seed UserSeeder
  1. Тестирование

Запуск тестирования проверяет в том числе и возвращаемый через эндпроинт /users не пустые поля description у пользователей

./vendor/bin/sail test

laravel-test's People

Contributors

alexeyinprime avatar alexander2555 avatar

Watchers

 avatar

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.