docs: update test checklist spec — 3-state status + error comments
This commit is contained in:
@@ -2,22 +2,24 @@
|
|||||||
|
|
||||||
**Date:** 2026-05-24
|
**Date:** 2026-05-24
|
||||||
**Status:** Approved
|
**Status:** Approved
|
||||||
|
**Updated:** 2026-05-24 (v2 — 3-state status + error comments)
|
||||||
|
|
||||||
## Summary
|
## Summary
|
||||||
|
|
||||||
Админ-страница с чек-листом для ручного тестирования функционала сайта. Каждая проверка имеет описание действия и ожидаемый результат. Отметка сохраняется в SQLite с автоматической датой.
|
Админ-страница с чек-листом для ручного тестирования функционала сайта. Каждая проверка имеет описание действия и ожидаемый результат. Отметка сохраняется в SQLite с автоматической датой. Поддерживает 3 состояния: пройдено / не пройдено (с комментарием об ошибке) / не проверено.
|
||||||
|
|
||||||
## Architecture
|
## Architecture
|
||||||
|
|
||||||
### Data Model
|
### Data Model
|
||||||
|
|
||||||
Новая модель `ChecklistResult` в Prisma schema:
|
Модель `ChecklistResult` в Prisma schema:
|
||||||
|
|
||||||
```prisma
|
```prisma
|
||||||
model ChecklistResult {
|
model ChecklistResult {
|
||||||
id String @id @default(cuid())
|
id String @id @default(cuid())
|
||||||
itemKey String @unique // уникальный ключ проверки
|
itemKey String @unique // уникальный ключ проверки
|
||||||
passed Boolean
|
passed Boolean // true = пройдено, false = не пройдено
|
||||||
|
comment String? // описание ошибки (при passed: false)
|
||||||
checkedAt DateTime @default(now())
|
checkedAt DateTime @default(now())
|
||||||
updatedAt DateTime @updatedAt
|
updatedAt DateTime @updatedAt
|
||||||
}
|
}
|
||||||
@@ -25,7 +27,7 @@ model ChecklistResult {
|
|||||||
|
|
||||||
### Elements Source
|
### Elements Source
|
||||||
|
|
||||||
Элементы чек-листа — хардкод в `shared/constants/test-checklist-items.ts` (JS + .d.ts). Версионируются с кодом.
|
Элементы чек-листа — хардкод в `shared/constants/test-checklist-items.js` (JS + .d.ts). Версионируются с кодом.
|
||||||
|
|
||||||
Структура элемента:
|
Структура элемента:
|
||||||
```ts
|
```ts
|
||||||
@@ -41,8 +43,8 @@ model ChecklistResult {
|
|||||||
|
|
||||||
**Server route:** `server/src/routes/api/admin/test-checklist.js`
|
**Server route:** `server/src/routes/api/admin/test-checklist.js`
|
||||||
|
|
||||||
- `GET /api/admin/test-checklist` — возвращает все элементы + их результаты из БД
|
- `GET /api/admin/test-checklist` — возвращает все элементы + их результаты из БД (включая `comment`)
|
||||||
- `PATCH /api/admin/test-checklist` — body: `{ itemKey, passed }`, обновляет/создаёт результат, `checkedAt = now()`
|
- `PATCH /api/admin/test-checklist` — body: `{ itemKey, passed, comment? }`, обновляет/создаёт результат, `checkedAt = now()`. При `passed: true` комментарий очищается.
|
||||||
- `POST /api/admin/test-checklist/reset` — сбрасывает все результаты (удаляет записи)
|
- `POST /api/admin/test-checklist/reset` — сбрасывает все результаты (удаляет записи)
|
||||||
|
|
||||||
Только для админов.
|
Только для админов.
|
||||||
@@ -52,9 +54,9 @@ model ChecklistResult {
|
|||||||
**Page:** `client/src/pages/admin-test-checklist/ui/AdminTestChecklistPage.tsx`
|
**Page:** `client/src/pages/admin-test-checklist/ui/AdminTestChecklistPage.tsx`
|
||||||
|
|
||||||
- Аккордеон по разделам (MUI Accordion)
|
- Аккордеон по разделам (MUI Accordion)
|
||||||
- Каждая строка: чекбокс, колонка "Действие", колонка "Ожидаемый результат", дата проверки
|
- Каждая строка: 3-состоятельный статус (✅ пройдено / ❌ не пройдено / ⬜ не проверено), колонка "Действие", колонка "Ожидаемый результат", колонка "Комментарий" (показывает текст ошибки с tooltip), дата проверки
|
||||||
- Чекбокс отмечен = `passed: true`, снят = `passed: false`
|
- При выборе «Не пройдено» — открывается диалог с обязательным полем «Описание ошибки» (textarea)
|
||||||
- Дата проставляется автоматически при изменении чекбокса
|
- Диалог: заголовок «Описание ошибки — {название проверки}», placeholder «Опишите, что пошло не так...», кнопки «Отмена» / «Сохранить», валидация — поле обязательно при ❌
|
||||||
- Кнопка «Сбросить все» для полного ре-теста
|
- Кнопка «Сбросить все» для полного ре-теста
|
||||||
- `@tanstack/react-query` для данных, `apiClient` для запросов
|
- `@tanstack/react-query` для данных, `apiClient` для запросов
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user