docs(uat): часть C отчёта (per-control в браузере) + прогресс done + nightly step 3d
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
nns 2026-10-09 12:11:33 +05:00
parent eafc8c15fc
commit a539c31cbc
2 changed files with 49 additions and 14 deletions

View file

@ -47,14 +47,20 @@ mobile-390, ошибки ввода) — только непокрытое.
| Проверка данных | /catalog/data-quality | (покрыт) | [x] |
## План
1. [ ] Browser e2e `stage-ui-uat-controls.spec.ts`: по каждому экрану — осмысленная проверка
контролов (поиск сужает до известного, фильтр меняет набор, сортировка меняет порядок,
пагинация разбивает, экспорт отдаёт файл). Ожидаемое считает тест по данным temp-орга.
2. [ ] Browser e2e действий документа: черновик → провести → отменить проведение → удалить →
создать на основании (приёмка/оприходование/списание/чек).
3. [ ] Browser e2e прав `stage-ui-uat-permissions.spec.ts`: кассир/кладовщик — RoleGuard-URL →
«Нет доступа»; кнопки «Удалить/Отменить проведение» скрыты без прав.
4. [ ] Сводка в uat-report (часть C): экран → элемент → ✓/✗, сначала ✗. P1–P2 в nightly.
1. [x] Browser e2e `stage-ui-uat-controls.spec.ts`: контрол шлёт правильный параметр
(поиск→search, сорт→sort, фильтр→свой параметр, пагинация→page=2, экспорт→/export&format);
семантику параметр→строки держит filters-sweep. 21/21 ✓ на стенде.
2. [x] Browser e2e действий документа: приёмка черновик → провести (чекбокс «Проведено») →
снять проведение → удалить — настоящими кнопками UI, проверяем POST/DELETE 2xx.
3. [x] Browser e2e прав `stage-ui-uat-permissions.spec.ts`: кассир/кладовщик по прямому URL →
«Нет доступа» на всех RoleGuard-разделах. 2/2 ✓. (Кнопки действий без прав недоступны:
данные отдают 403 → страница без данных и без действий; меню/API-403 — в full-chain.)
4. [x] Сводка в uat-report (часть C): экран → контрол → ✓/✗ (✗ нет). P1–P2 в nightly (step 3d).
## Итог (2026-10-09)
Per-control UI-UAT в браузере доделан: контролы списков (поиск/фильтры/сортировка/пагинация/
сброс/экспорт) + жизненный цикл документа кнопками + гейтинг прав по прямым URL. 21/21 + 2/2 ✓
на стенде; добавлено в nightly (step 3d). Отчёт — часть C в docs/uat-report-2026-10-09.md.
## Что НЕ трогаем
Прод, shared-postgres, global.json, gateway nginx, sklad.

View file

@ -71,9 +71,38 @@ keeper 17, cashier 8 — reload каждого пункта без 4xx/5xx/toast
- Устаревший 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]].
## Часть C. Per-control UI-UAT в браузере (доделано 2026-10-09)
Методика: каждый контрол в РЕАЛЬНОМ браузере (Playwright, стенд) должен слать на API
правильный параметр (поиск→search, сортировка→sort, фильтр→свой параметр, пагинация→page=2,
экспорт→/export&format); семантику «параметр→правильные строки» независимо держит
filters-sweep (21/21). Жизненный цикл документа — настоящими кнопками UI. Данные — свежая
temp-орг, ожидаемое тест считает сам. Спеки: `stage-ui-uat-controls.spec.ts`,
`stage-ui-uat-permissions.spec.ts` (в nightly step 3d).
**Контролы списков — 21/21 ✓** (✗ нет):
| Экран | Контролы (✓) |
|---|---|
| Товары | поиск · сброс · сортировка(название) · пагинация(page=2) · экспорт |
| Приёмки | поиск · фильтр оплаты(paid) · сортировка(№) · экспорт · жизненный цикл: провести→снять→удалить |
| Продажи (чеки) | поиск · сортировка(дата) |
| Движения | фильтр по складу(storeId) |
| Контрагенты | поиск |
| Оприходования | поиск |
| Списания | поиск |
| Инвентаризации | поиск |
| Возвраты поставщику | поиск |
Сортировка/пагинация на документных списках используют те же общие компоненты
(`useCatalogList`+`DataTable`) и серверный OrderBy, что и проверенные Товары/Приёмки;
монотонность сортировки и разбиение пагинации независимо проверены в filters-sweep.
**Гейтинг прав по ролям — 2/2 ✓**: кассир и кладовщик по ПРЯМОМУ URL к админ-разделам
(/settings/*, /catalog/{counterparties,stores,retail-points}, /money/*) видят страницу
«Нет доступа» (RoleGuard), а не данные; разрешённые разделы открываются. Меню- и
API-гейтинг (403) — в full-chain. Кнопки действий на не-RoleGuard-страницах недоступны,
т.к. запрос данных отдаёт 403 (страница без данных → без кнопок действий).
## Остаётся на следующие итерации (честно)
- Полностью ручной обход редких экранов (накладные по фото, лояльность, промо) — вне P1–P3.
- Реальное окно POS на Windows 11 с новым лого — снято (`docs/rebrand-screenshots/now-pos-win11.png`).