Вернуться в магазин
Спецификация продукта
Требования к «Пиццаеду»
«Пиццаед» — учебный интернет-магазин доставки пиццы для практики QA. Документ описывает текущее целевое поведение продукта, бизнес-правила, API-контракт и критерии приёмки.
Открыть документацию проектаЦель
Дать учащимся один стабильный продукт для практики UI, API, требований, чек-листов, тест-кейсов и баг-репортов.
Данные
Состояние корзины и заказов хранится в учебной сессии. Сессия задаётся заголовком X-Course-Session.
Границы MVP
Нет оплаты, авторизации, личного кабинета и реальной доставки. Заказ создаётся в учебных целях.
Функциональные требования
- Пользователь видит каталог товаров с категориями: пицца, напитки, десерты и соусы.
- Пользователь может искать товары по названию, описанию и бейджам. При активном поиске результат отображается по всем категориям.
- Пользователь может фильтровать каталог по одной категории, если строка поиска пустая.
- Карточка товара содержит название, категорию, описание, цену, рейтинг, бейджи и признак наличия.
- Доступный товар можно добавить в корзину из каталога.
- Недоступный товар отображается в каталоге, но не может быть добавлен в корзину.
- В корзине пользователь может увеличить или уменьшить количество товара в диапазоне от 1 до 20.
- Если количество товара уменьшено до 0, товар удаляется из корзины.
- Корзина показывает сумму товаров, скидку, стоимость доставки и итоговую сумму заказа.
- Пользователь может применить промокод QA60 и увидеть пересчитанную сумму заказа.
- Для оформления заказа пользователь указывает имя, телефон и адрес доставки.
- После успешного оформления заказа пользователь видит popup с номером, суммой и статусом заказа.
- Если заказ создать нельзя, пользователь видит popup с описанием ошибки.
- После успешного оформления заказа корзина очищается.
Бизнес-правила
- Промокод QA60 даёт скидку 10% от суммы товаров до доставки.
- Скидка округляется вниз до целых рублей.
- Если промокод не равен QA60, скидка не применяется.
- Пробелы в начале и конце промокода игнорируются, регистр символов не важен.
- Повторный ввод QA60 не увеличивает скидку — промокод применяется один раз к текущей корзине.
- Если состав корзины изменился после ввода промокода, скидка пересчитывается от новой суммы товаров.
- Доставка стоит 199 рублей, если сумма товаров меньше 1500 рублей.
- Доставка бесплатная, если сумма товаров равна 1500 рублей или больше.
- Минимальная сумма заказа в текущей версии не ограничена.
- Товар «Чизкейк» является тестовым примером товара не в наличии.
- Новый заказ создаётся со статусом created.
API-требования
- GET /api/course/v1/shop/products возвращает список товаров и поддерживает q, category, in_stock.
- GET /api/course/v1/shop/products/{id} возвращает один товар или 404, если товар не найден.
- GET /api/course/v1/shop/cart возвращает корзину текущей учебной сессии.
- POST /api/course/v1/shop/cart добавляет товар в корзину и возвращает 201.
- PATCH /api/course/v1/shop/cart/{productId} изменяет количество товара в корзине.
- DELETE /api/course/v1/shop/cart/{productId} удаляет товар из корзины.
- POST /api/course/v1/shop/orders создаёт заказ и возвращает 201.
- Ошибки валидации возвращаются в JSON-формате со статусом 422.
Критерии приёмки
- Пользователь может пройти основной путь: каталог → корзина → оформление → popup успешного заказа.
- Попытка оформить пустую корзину показывает popup с ошибкой.
- Попытка добавить «Чизкейк» невозможна через UI и отклоняется API.
- Поиск по слову «соус» находит товары из разных категорий, если они подходят по названию, описанию или бейджам.
- Промокод QA60 меняет скидку и итоговую сумму заказа.
- После создания заказа корзина становится пустой.