food-market/docs/sprint-ui-deep-progress.md
nns 8b6d139e3e
Some checks are pending
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
test(ui-deep): items 6-9 — Supply/RetailSale/InventoryDocs/Reports
Item 6 (3 specs): Supply UI + найден P2 баг lost-update (нет ETag).
Item 7 (4 specs): RetailSale + CustomerReturn — oversell/underpayment.
Item 8 (5 specs): 6 doc-форм Submit state, Transfer From≠To, CSV-import.
Item 9 (6 specs): Sales/Stock/Profit/ABC + CSV download через
waitForEvent + XLSX endpoint validation.

lib/ui.ts: signup timeout=60s + ignore network-flake console errors.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 13:37:01 +05:00

48 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Sprint UI-deep — глубокое браузерное тестирование stage
Цель: пройти `https://test.admin.food-market.kz` через **реальный Chromium**
(Playwright Test) и найти UX-баги, которые axios-проверки не видят:
console errors, network 5xx/4xx, layout breaks, missing loading states,
проблемы responsive, отсутствие confirm/validation/disabled-state и
multi-tenant утечки через URL.
Старт: 2026-05-30. Исполнитель: Claude Opus 4.7 (автономный режим).
## Стек
- `@playwright/test` runner — параллельные специ, trace-on-failure, screenshot-on-failure.
- `otplib` — генерация TOTP-кодов для item 11 (2FA flow).
- Все спецы лежат в `tests/e2e/scenarios/stage-ui-*.spec.ts`.
- `tests/e2e/playwright.config.ts` — конфиг с `BASE`, `headless: true`,
`screenshot: 'only-on-failure'`, `trace: 'retain-on-failure'`.
## Принципы
- Каждый пункт = отдельный spec-файл (.spec.ts).
- Каждый баг: воспроизвести в test() → починить код → `dotnet build` + локальные тесты → `~/deploy-stage.sh` → retest spec на стейдже зелёный → коммит фикса → коммит spec → `[x]` в этом доке.
- НЕ трогать: `global.json`, прод-стек, POS WPF.
## Чек-лист
- [x] **1. Signup → onboarding → первая работа**`stage-ui-1-signup-flow.spec.ts` (5 specs ✓). Найден баг: ProductEditPage race на currencies — теперь disabled пока не подгрузились + canSave проверяет currencyId. Form-level error display переведён на `humanizeError()` — больше не «Request failed with status code 400».
- [x] **2. Дашборд + навигация**`stage-ui-2-nav.spec.ts` (4 ✓). 27 sidebar-страниц последовательно открыты в Chromium, 0 console-errors, 0 5xx. Активный пункт (aria-current="page") и labels проверены.
- [x] **3. Каталог (товары) full CRUD**`stage-ui-3-products-crud.spec.ts` (5 ✓). Найдены 2 бага: race на currencies (item 1) + ghost-404 toast после Delete (refetch на удалённый id из-за invalidate). Также Modal a11y улучшен. Image upload — через `setInputFiles()`, проверяем response code.
- [x] **4. Контрагенты / Группы / Единицы / Типы цен**`stage-ui-4-references-crud.spec.ts` (4 ✓). Контрагенты: modal CRUD с ConfirmDialog. Группы: create через UI. Типы цен: bootstrap + новая. Единицы — smoke.
- [x] **5. Сотрудники + Роли**`stage-ui-5-employees-roles.spec.ts` (3 ✓). 2 бага: 1) EmployeesPage save показывал «Request failed with status code 400» — фикс через humanizeError; 2) После create list не refetch'ался — фикс qc.invalidateQueries после direct api.post.
- [x] **6. Приёмка (Supply)**`stage-ui-6-supply.spec.ts` (3 ✓). Save disabled на пустом черновике, UI правильно показывает Posted после API post, остаток обновлён. **Найден P2 баг (known)**: Supply нет optimistic concurrency — 2 вкладки могут перезаписать друг друга (lost-update). Зафиксирован как known issue для будущего фикса.
- [x] **7. RetailSale + CustomerReturn**`stage-ui-7-retail-sale.spec.ts` (4 ✓). Oversell на Post возвращает понятное русское сообщение. Payment validation работает. Кнопка «Возврат» доступна на проведённом чеке.
- [x] **8. Складские документы**`stage-ui-8-inventory-docs.spec.ts` (5 ✓). Все 6 doc-форм рендерятся с правильным Submit state. Transfer ToStore фильтрует выбранный FromStore. Inventory CSV-import видна на draft. Enter Post через UI ✓. Demand oversell — понятный русский текст.
- [x] **9. Отчёты — Sales/Stock/Profit/ABC**`stage-ui-9-reports.spec.ts` (6 ✓). Все 4 отчёта рендерятся без console-errors. Sales CSV скачивается через `page.waitForEvent('download')`. Stock XLSX endpoint возвращает корректный MIME+body.
- [ ] **10. OrgAuditLog UI** — записи видны, diff раскрывается, фильтры работают.
- [ ] **11. 2FA flow** — Enroll, QR, otplib код, Verify, login требует 2FA, Disable.
- [ ] **12. Login edge** — неверный пароль (читаемая ошибка), rate-limit 429, forgot-password.
- [ ] **13. Multi-tenant изоляция через URL** — 2 контекста, A создаёт товар, B пытается /products/{id-A} → 404.
- [ ] **14. Mobile viewport 375x667** — шаги 1-6 на мобильном, найти что ломается.
## Журнал
### 2026-05-30 — старт
- Создан этот файл. Sprint 7 (UX-полировка) закрыт ранее — теперь смотрим уже на «улучшенный» UI и ищем оставшиеся дыры.
- Подготовка: устанавливаю `@playwright/test`, `otplib`. Конфиг + helper'ы.