food-market/docs/sprint-ui-deep-progress.md
nns b9d9174a61
Some checks failed
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
Docker Web / Build + push Web (push) Has been cancelled
Docker Web / Deploy Web on stage (push) Has been cancelled
test(ui-deep): items 4-5 specs + docs
Item 4 (4 specs): Контрагенты CRUD через modal + ConfirmDialog, Группы
товаров create, Типы цен create, Единицы smoke.

Item 5 (3 specs): Роли (wizard + create), Сотрудники (owner-record,
create через UI с email чтобы createAccount требование выполнилось),
Owner запись не удаляется.

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

4.8 KiB
Raw Blame History

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.

Чек-лист

  • 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».
  • 2. Дашборд + навигацияstage-ui-2-nav.spec.ts (4 ✓). 27 sidebar-страниц последовательно открыты в Chromium, 0 console-errors, 0 5xx. Активный пункт (aria-current="page") и labels проверены.
  • 3. Каталог (товары) full CRUDstage-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.
  • 4. Контрагенты / Группы / Единицы / Типы ценstage-ui-4-references-crud.spec.ts (4 ✓). Контрагенты: modal CRUD с ConfirmDialog. Группы: create через UI. Типы цен: bootstrap + новая. Единицы — smoke.
  • 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.
  • 6. Приёмка (Supply) — Draft→Post через UI, кнопка disabled без строк, остаток обновлён, Unpost, конкурентность (2 вкладки → 409).
  • 7. RetailSale + CustomerReturn — payment-валидация, oversell-ошибка читаемая, возврат из проведённой продажи кнопкой.
  • 8. Складские документы — Enter/Loss/Transfer/Inventory/SupplierReturn/Demand: создать→провести→остаток. Transfer запрет From==To. Inventory CSV-import.
  • 9. Отчёты — Sales/Stock/Profit/ABC — фильтры через UI, числа сходятся, CSV/XLSX скачивается через page.waitForEvent('download').
  • 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'ы.