Some checks are pending
Sprint UI-deep, пункт 1: реальный Chromium через Playwright Test.
Установлены @playwright/test 1.60.0 и otplib (для item 11).
Конфиг tests/e2e/playwright.config.ts — workers=1, traces+screenshots
on-failure, screenshot dir reports/playwright-artifacts/.
Хелперы tests/e2e/lib/ui.ts:
- apiSignup() — быстрый signup через API + login
- attachSession() — кладёт access_token в localStorage, грузит путь
- watchPage() — listener console-errors и network 4xx/5xx
- expectNoErrors() — assert после flow'a
Item 1 (5 specs, все ✓ на стейдже):
- 1.1 attach session → /dashboard, без console-ошибок
- 1.2 создание товара через UI (Empty CTA → форма → Сохранить)
- 1.3 первый контрагент через Modal
- 1.4 создать товар + контрагент через API, открыть форму приёмки,
smoke на компоненты страницы
- 1.5 OnboardingPage (/) рендерится
Найден 1 реальный баг → починен:
- ProductEditPage: race на currencies.data — если быстро Сохранить,
цена-MoneyInput добавляет строку с currencyId='' → server 400 с
криптичным JSON validation. Фикс: MoneyInput disabled пока
!currencies.data + canSave проверяет row.currencyId.
- Form error display показывал "Request failed with status code 400";
теперь использует общий humanizeError() (exporting из @/lib/api).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
48 lines
4.1 KiB
Markdown
48 lines
4.1 KiB
Markdown
# 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 → первая работа** — реальный browser signup, создание товара/контрагента/приёмки через клики, остаток виден на товаре.
|
||
- [ ] **2. Дашборд + навигация** — клик каждый пункт sidebar, страницы грузятся без console-ошибок и 5xx.
|
||
- [ ] **3. Каталог (товары) full CRUD** — создание с ценой+картинкой+штрихкодом, редактирование, дубль артикула → ошибка, удаление через confirm, поиск, пагинация.
|
||
- [ ] **4. Контрагенты / Группы / Единицы / Типы цен** — те же CRUD-проверки.
|
||
- [ ] **5. Сотрудники + Роли** — создание, role assignment, смена пароля, удаление активного.
|
||
- [ ] **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'ы.
|