food-market/docs/uat-per-control-progress.md
nns 605c1bac2c test(uat): браузерные per-control проверки + гейтинг прав по прямым URL
- stage-ui-uat-controls: в браузере контролы списков шлют правильный параметр
  (поиск→search, сортировка→sort, фильтр→свой параметр, пагинация→page=2,
  экспорт→/export&format), + жизненный цикл документа приёмки (провести чекбоксом
  «Проведено»→POST /post, снять→/unpost, удалить→DELETE). 16/16 ✓. Семантику
  параметр→строки независимо держит filters-sweep.
- stage-ui-uat-permissions: кассир/кладовщик по ПРЯМОМУ URL к админ-разделам видят
  «Нет доступа» (RoleGuard), разрешённые разделы открываются. 2/2 ✓.
- docs/uat-per-control-progress.md — реестр экранов × контролов.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 12:06:02 +05:00

4.5 KiB
Raw Blame History

UAT по каждому элементу управления — прогресс

Доделываем то, что в docs/uat-report-2026-10-09.md честно помечено «не покрыто»: per-control UI-UAT P2–P4 в браузере + UI-гейтинг прав по ролям (кнопки и прямые URL).

Правило владельца: НЕ перепроверять уже покрытое (часть A отчёта, filters-sweep 21/21, mobile-390, ошибки ввода) — только непокрытое.

Легенда: [x] готово · [~] частично · [ ] не начато.

Как устроены списки (чтобы тестировать осмысленно)

Все list-страницы используют общий useCatalogList(url, extraParams) → search, page, sortKey/sortOrder (клик по заголовку колонки), фильтры — <Select>; экспорт — ExportButton (с текущими фильтрами); действия документа (провести/отменить/удалить/на основании/печать) — на страницах редактирования (*/new, */:id). Права в UI — RoleGuard (показывает «Нет доступа») и useCan()/AdvancedModeGuard.

Реестр экранов × контролов (P1–P4)

Контролы: S=поиск, F=фильтры (период/статус/склад/точка/кассир/контрагент/группа), O=сортировка по колонкам, P=пагинация, R=сброс, X=экспорт-с-фильтрами, A=действия (провести/отменить/удалить/ печать/на основании), G=гейтинг прав (кнопки + прямой URL).

Экран URL Контролы Статус
Товары /catalog/products S F O P X A [ ]
Остатки /inventory/stock (покрыт filters-sweep) [x]
Движения /inventory/movements S F O P [ ]
Приёмки /purchases/supplies S F O P X A [ ]
Накладные по фото /purchases/invoices S F A [ ]
Оприходования /inventory/enters S F O P A [ ]
Списания /inventory/losses S F O P A [ ]
Инвентаризации /inventory/inventories S F O P A [ ]
Возвраты поставщику /purchases/supplier-returns S F O P A [ ]
Продажи (чеки) /sales/retail S F O P X A [ ]
Контрагенты /catalog/counterparties S F O P A G [ ]
Сотрудники /settings/employees S A G [ ]
Точки продаж /catalog/retail-points A G [ ]
Склады /catalog/stores A G [ ]
Счета /money/accounts A G [ ]
Платежи/транзакции /money/transactions S F O P G [ ]
Смены /money/shifts F O P A [ ]
Долги поставщикам /money/supplier-debts S F O P G [ ]
Отчёт продаж /reports/sales F X G [ ]
Отчёт прибыли /reports/profit F X G [ ]
Отчёт денег /money/report F X G [ ]
Отчёт остатков /reports/stock F X [ ]
Проверка данных /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.

Что НЕ трогаем

Прод, shared-postgres, global.json, gateway nginx, sklad.