diff --git a/docs/uat-per-control-progress.md b/docs/uat-per-control-progress.md index 145674b..b7b2604 100644 --- a/docs/uat-per-control-progress.md +++ b/docs/uat-per-control-progress.md @@ -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. diff --git a/docs/uat-report-2026-10-09.md b/docs/uat-report-2026-10-09.md index fecf22b..47ab834 100644 --- a/docs/uat-report-2026-10-09.md +++ b/docs/uat-report-2026-10-09.md @@ -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`).