Целью данного задания является ознакомление с различными видами тестирования приложений и интсрументами для них.
Предполается, что у вас уже есть приложение с прошлых заданий, поэтому следует использовать его.
Реализовать возможность аренды автомобилей и возврата автомобилей в текущем приложении.
Аренда возможно только для зарегистрированных пользователей, авторизованых в приложении.
Для хранения арендовыных автомобилей вам может понадобиться дополнительная таблица
типа rentals
или bookings
.
Для заданий 1 и 2 рекомендуется использовать PHPUnit + любые средства для создания mock- объектов.
Для задания 3 рекомендуется наследование класса TestCase
из фреймворка, т.к он уже содержит встроенный
http-клиент.
Реализовать класс RentalService
, который будет заниматься арендой автомобилей
и unit-test RentalServiceTest
для его проверки.
Для того, чтобы арендовать автомобиль необходима следующая информация:
car_id
- ID автомобиляuser_id
- ID текущего пользователяrented_from
- место (адрес), откуда машина была взята в арендуrented_at
- время (DATETIME), когда машина поступила в аренду. Проставляется автоматическиprice
- фиксированная стоимость. Некая константа или значение из конфигурационного файла.
Правила аренды
-
Пользователь не может арендовать автомобиль, если за ним уже числится хотя бы один, который он не вернул.
-
Нельзя арендовать не существующий(удаленный) автомобиль
-
Нельзя арендовать арендованый кем-то автомобиль
-
Несуществующий пользователь не может арендовать
Реализовать класс ReturnService
, который будет отвечать за возврат арендованых автомобилей
и unit-test ReturnServiceTest
, что бы его проверить.
Для того, чтобы вернуть арендованый автомобиль необходима следующая информация:
car_id
- ID автомобиляuser_id
- ID текущего пользователяreturned_to
- место (адрес), куда машину вернулиreturned_at
- время (DATETIME), когда машину вернули. Проставляется автоматически
Правила возврата
-
Нельзя вернуть не существующий(удаленный) автомобиль
-
Нельзя вернуть автомобиль, который арендовал другой пользователь
-
Несуществующий пользователь не может вернуть автомобиль
Реализовать REST-api для аренды и возврата автомобилей. Например, в виде следующих маршрутов
/cars/rent
- POST
/cars/return
- POST.
Форматы запроса и ответа вы проектируете сами и описываете в файле README.
Необходимо реализовать функциональные тесты RentalApiTest
и ReturnApiTest
в виде
запрос-ответ.
Пример, Laravel Testing.
Тестовые данные можно подготовить используя библиотеку Faker .
Поскольку тесты для данного задания будете писать вы сами, инструкции по запуску лучше предоставить в README к репозиторию.
В идеале разместить ваше решение в одельном репозитории или форке текущего на Github или Bitbucket и прислать ссылку на него.
./vendor/bin/phpunit
- RentalServiceTest - сервис аренды автомобилей
- ReturnServiceTest - сервис возврата автомобилей
- RentalApiTest - аренда автомобилей по маршруту /api/cars/rent/
- ReturnApiTest - возврат автомобиля по маршруту /api/cars/return/