Files
shop-server/docs/superpowers/specs/2026-05-24-admin-test-checklist-design.md
T

8.8 KiB

Design: Admin Test Checklist

Date: 2026-05-24 Status: Approved Updated: 2026-05-24 (v2 — 3-state status + error comments)

Summary

Админ-страница с чек-листом для ручного тестирования функционала сайта. Каждая проверка имеет описание действия и ожидаемый результат. Отметка сохраняется в SQLite с автоматической датой. Поддерживает 3 состояния: пройдено / не пройдено (с комментарием об ошибке) / не проверено.

Architecture

Data Model

Модель ChecklistResult в Prisma schema:

model ChecklistResult {
  id         String   @id @default(cuid())
  itemKey    String   @unique  // уникальный ключ проверки
  passed     Boolean  // true = пройдено, false = не пройдено
  comment    String?  // описание ошибки (при passed: false)
  checkedAt  DateTime @default(now())
  updatedAt  DateTime @updatedAt
}

Elements Source

Элементы чек-листа — хардкод в shared/constants/test-checklist-items.js (JS + .d.ts). Версионируются с кодом.

Структура элемента:

{
  key: string          // уникальный идентификатор
  section: string      // раздел (группировка)
  action: string       // что сделать
  expectedResult: string // что должно произойти
}

API

Server route: server/src/routes/api/admin/test-checklist.js

  • GET /api/admin/test-checklist — возвращает все элементы + их результаты из БД (включая comment)
  • PATCH /api/admin/test-checklist — body: { itemKey, passed, comment? }, обновляет/создаёт результат, checkedAt = now(). При passed: true комментарий очищается.
  • POST /api/admin/test-checklist/reset — сбрасывает все результаты (удаляет записи)

Только для админов.

Frontend

Page: client/src/pages/admin-test-checklist/ui/AdminTestChecklistPage.tsx

  • Аккордеон по разделам (MUI Accordion)
  • Каждая строка: 3-состоятельный статус ( пройдено / не пройдено / не проверено), колонка "Действие", колонка "Ожидаемый результат", колонка "Комментарий" (показывает текст ошибки с tooltip), дата проверки
  • При выборе «Не пройдено» — открывается диалог с обязательным полем «Описание ошибки» (textarea)
  • Диалог: заголовок «Описание ошибки — {название проверки}», placeholder «Опишите, что пошло не так...», кнопки «Отмена» / «Сохранить», валидация — поле обязательно при
  • Кнопка «Сбросить все» для полного ре-теста
  • @tanstack/react-query для данных, apiClient для запросов

Navigation: новый пункт в AdminLayoutPage — «Тест-чеклист» с иконкой ClipboardCheck, роут /admin/test-checklist

Sections & Items

Авторизация (auth)

  • auth.register-email — Регистрация по email → код приходит, аккаунт создаётся
  • auth.login-password — Вход по паролю → корректный пускает, неправильный — ошибка
  • auth.oauth-vk — OAuth VK → редирект, callback, авторизация
  • auth.oauth-yandex — OAuth Yandex → редирект, callback, авторизация
  • auth.reset-password — Сброс пароля → письмо приходит, ссылка работает
  • auth.logout — Выход → сессия очищается

Каталог и товары (catalog)

  • catalog.homepage — Главная → слайдер грузится, товары отображаются
  • catalog.filters — Фильтры → по категории, цене, материалам работают
  • catalog.product-page — Страница товара → фото, описание, цена, кнопка "В корзину"
  • catalog.seo — SEO → title, meta, slug корректные

Корзина (cart)

  • cart.add — Добавление товара → счётчик обновляется
  • cart.change-qty — Изменение количества → пересчёт суммы
  • cart.remove — Удаление → товар убирается, сумма пересчитывается

Чекаут (checkout)

  • checkout.address — Выбор адреса → из сохранённых / новый
  • checkout.delivery — Выбор доставки → Почта, OZON, Яндекс, 5post
  • checkout.payment — Выбор оплаты → онлайн / при получении
  • checkout.comment — Комментарий к заказу → поле работает
  • checkout.create — Создание заказа → заказ создаётся, статус DRAFT

Оплата (payment)

  • payment.yookassa — ЮKassa → редирект на оплату, webhook обрабатывается
  • payment.status — Статус платежа → обновляется после webhook

Профиль пользователя (profile)

  • profile.avatar — Аватар → загрузка, отображение, удаление
  • profile.settings — Настройки → email, имя, способы входа
  • profile.addresses — Адреса → добавление, редактирование, удаление, по умолчанию
  • profile.orders — Заказы → список, детали, статусы
  • profile.messages — Сообщения по заказу → отправка, получение, read state
  • profile.notifications — Уведомления → вкл/выкл каналы
  • profile.delete-account — Удаление аккаунта → данные удаляются

Админ — Товары (admin-products)

  • admin-products.list — Список → пагинация, поиск
  • admin-products.create — Создание → все поля, загрузка фото, публикация
  • admin-products.edit — Редактирование → изменения сохраняются
  • admin-products.delete — Удаление → товар удаляется
  • admin-products.images — Изображения → добавление, сортировка, удаление

Админ — Категории (admin-categories)

  • admin-categories.crud — CRUD категорий, сортировка

Админ — Заказы (admin-orders)

  • admin-orders.list — Список → фильтрация по статусу, внимание
  • admin-orders.details — Детали → состав, статус, смена статуса
  • admin-orders.messages — Сообщения → ответ пользователю

Админ — Отзывы (admin-reviews)

  • admin-reviews.list — Список → pending/approved/rejected
  • admin-reviews.moderate — Модерация → approve/reject

Админ — Пользователи (admin-users)

  • admin-users.list — Список → email, дата регистрации
  • admin-users.orders — Просмотр заказов пользователя
  • admin-gallery.upload — Загрузка, удаление, использование в слайдере

Админ — Настройки (admin-settings)

  • admin-settings.notifications — Уведомления → email, telegram

Инфо-страницы (info)

  • info.pages — Доставка, оплата, как заказать, статусы заказов
  • info.legal — Политика конфиденциальности, условия использования

SSE / Realtime (sse)

  • sse.notifications — Уведомления приходят в реальном времени

Implementation Plan

  1. Prisma migration — добавить модель ChecklistResult
  2. Shared constants — test-checklist-items.ts
  3. Server API route — GET/PATCH/POST
  4. Client page — AdminTestChecklistPage
  5. Client routing — добавить в AdminLayoutPage
  6. Register route in client/src/app/routes/index.tsx