Вернуться в магазин

Спецификация продукта

Требования к «Пиццаеду»

«Пиццаед» — учебный интернет-магазин доставки пиццы для практики 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 меняет скидку и итоговую сумму заказа.
  • После создания заказа корзина становится пустой.