food-market/docs/uat-report-2026-10-09.md
nns 4986d85b73 test(uat): расширить mobile-UAT до 16 экранов P1-P4 + обновить отчёт
stage-ui-uat-mobile проходит по 16 спискам P1-P4 на 390px (каталог/контрагенты/
склад/приёмки/продажи/деньги/отчёты/сотрудники): без h-scroll, console-ошибок и 5xx.
Отчёт дополнен: UI-гейтинг по ролям (menu-walk 3/3), окно кассы Windows 11.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-09 10:37:57 +05:00

7.7 KiB
Raw Blame History

Приёмочное тестирование (UAT) — 2026-10-09

Стенд: https://test.admin.food-market.kz. Исполнитель: автономная сессия (Opus 4.8). Правило владельца: не перепроверять уже проверенное, тестировать только непокрытое; отчёт — двумя частями.

Часть A. Уже покрыто (регрессия, НЕ перепроверяем заново)

Область Чем покрыто Где
Сквозная «жизнь магазина» (регистрация→справочники→сотрудники/точки→деньги→3 приёмки→оплаты→смена/продажи/возврат/Z→склад→отчёты→инварианты→откат), сверка ЧИСЕЛ full-chain e2e (режим C temp-орг + режим B демо) tests/e2e/full-chain.sh, nightly step 3b, watchdog step 11
Доступность всех пунктов меню, роутинг menu-walk e2e watchdog step 9 (4-час каденция)
Касса (POS): продажа/оплата/отложенные/смена/деньги, кросс-платформенный рендер POS --uitest/smoke + headless-скриншоты (24 кадра) src/food-market.pos, pos_done
iOS «FM Склад»: остатки по группе, штрихкоды, /api/me права, весовые этикетки integration MobileApiTests tests/food-market.IntegrationTests/MobileApiTests.cs
Отрицательные остатки: разрешение продажи/списания в минус, алерт, recount, авто-resolve integration NegativeStockTests там же
Отчёт остатков на дату, прибыль, продажи, ABC integration StockReport/Profit/Sales/AbcReportTests там же
Деньги/смена: внесения/выемки, авто-открытие смены, Z-отчёт integration MoneyModule + full-chain там же
Мультитенантность/авторизация/роли/2FA/SSO/лояльность/промо integration + watchdog step 7 sprint27_done и др.
Простой/расширенный режим (гейтинг функций) AdvancedMode unit+integration+e2e sprint29_done

Часть B. Проверено сейчас (непокрытое ранее)

B1. Баг владельца «показать нулевые» + фильтры (Часть 1–2) — ✅

Полная сверка — в docs/filters-sweep-progress.md. Кратко:

# Проверка Ожидание Факт ✓/✗
1 Demo (30 894), stock без флага только с остатком total 12 ✓
2 Demo, stock?includeZero=true все не-услуги/не-архив 30 894 ✓
3 4× «BIOBLAS шампунь» различимы, не удалены, нулевой виден разные арт.+ШК; art 19677 qty 0 виден ✓
4 catalog?productGroupId=<g> фильтрует (был игнор) 5047 (как groupId) ✓
5 stock?groupId&includeZero (iOS) товары группы с нулями 5047 (было 0) ✓
6 filters-sweep (21 смысловых проверок) все сходятся 21/21 ✓ ✓
7 Производительность (30k, стр. 500) < 500 мс 162–399 мс ✓

B2. Ошибки ввода — дружелюбный русский (не 500 / не технический англ.) — ✅

Проба POST с кривыми телами на 6 типах (fresh temp-орг), ни одного 500 / утечки классов:

Эндпоинт Вход Ответ ✓/✗
inventory/losses enum «ХЗ» «Неверное значение поля «Причина»» ✓
sales/retail payment «нал» «Неверное значение поля «Оплата»» ✓
catalog/products packaging «штук» «Неверное значение поля «Фасовка»» ✓
inventory/enters пустое тело «Поле StoreId обязательно.» ✓
catalog/counterparties пустое имя «Название обязательно.» (+рус. заголовок) ✓
inventory/transfers в простом режиме 403 «доступно в расширенном режиме» ✓

B3. Экраны P1–P4 на ширине телефона (390px) — ✅

Playwright-спека stage-ui-uat-mobile.spec.ts (в nightly-наборе): 16 экранов — dashboard, catalog/products, counterparties, inventory/{stock,movements,enters,losses, inventories}, purchases/supplies, sales/retail, money/{accounts,shifts}, reports/{sales, stock,profit}, settings/employees — без горизонтального скролла, без console-ошибок и 5xx. Скриншоты: tests/e2e/reports/uat-mobile/ (галерея index.html). Все 16 — ✓.

Плюс на «Остатках» (390px): по умолчанию виден товар со стоком с артикулом/штрихкодом, нулевой скрыт; тумблер «Показать нулевые» показывает нулевой — визуально подтверждено (stock-includeZero-390.png).

B3a. UI-гейтинг прав по ролям (demo-admin/keeper/cashier) — ✅ (попутно)

menu-walk (watchdog step 9) прошёл для 3 ролей и подтвердил разное меню: admin 34 пункта, keeper 17, cashier 8 — reload каждого пункта без 4xx/5xx/toast.error/console.error. 3/3 ✓.

B3b. Реальное окно кассы на Windows 11 с новым лого — ✅ (rebrand)

Снято на win11-kassa-test VM (foodmarket.Pos.exe --demo): заголовок «ALL MARKET · Касса», крупное лого all market, «Касса» рядом, экран продажи целиком, таскбар Windows 11. docs/rebrand-screenshots/now-pos-win11.png (коммит rebrand:, отдельно от фиксов).

B4. Прочие найденные и починенные баги (детали в filters-sweep-progress.md)

  • Будущие времена в «Последние продажи» — нормализация даты к UTC + clamp будущего.
  • causeUserId=null в алертах минуса — автор пишется для всех типов документов.
  • Устаревший oversell-тест (409) приведён к политике «минус разрешён».
  • food-market.UnitTests не компилировался (FakeServer) — починен, юнит-тесты снова идут.

Остаётся на следующие итерации (честно, не покрыто этой сессией)

  • Ручной обход КАЖДОГО контрола на КАЖДОМ экране P2–P4 в браузере (периоды/статусы/ сорт на продажах/приёмках/движениях/контрагентах/сотрудниках). Частично покрыто filters-sweep (списки) и menu-walk (достижимость); полный per-control UI-UAT — далее.
  • UI-гейтинг прав для роли «кассир» в вебе (API-права покрыты /api/me; UI-скрытие — далее).
  • Реальное окно POS на Windows 11 с новым лого (VM-захват) — отдельная задача pos_windows_capture.