food-market/tests/e2e/reports/full-cycle-2026-05-08-after-fixes.md
nns dd3ee58502 e2e: full-cycle отчёт после fix 1+2+3 (Cashier 403/Identity-role + phone ФЛК + units global)
Stage прогон против commit ee127b2:
- 9 ✓ / 0 ✗ / 0 ⚠ / 3 ◯ (baseline: 8/1/0/3)
- step05 Cashier полностью зелёный: Identity-role «Cashier» маппится,
  /api/organization/employees → 403
- step01 новая проверка серверной phone-ФЛК → 400 на невалидном
- step08 «Нет ни одной единицы измерения» исчез — новая орга получает
  5 active globals через junction сразу при создании
- HIGH bug сменился: теперь блокер «product требует штрихкод» (отдельный
  вопрос — либо баг ProductsController, либо e2e-сценарий должен
  передавать barcode)
2026-05-08 01:34:55 +05:00

6.9 KiB
Raw Blame History

E2E report: full-cycle (after fixes 2026-05-08)

Запущен: 2026-05-07T20:33:45.272Z Длительность: 7.7с

Итог: 9 ✓ / 0 ✗ / 0 ⚠ / 3 ◯ (всего 12)

Дельты к baseline (full-cycle-2026-05-07-baseline.md)

Метрика Baseline After fixes Δ
Passed 8 9 +1
Failed 1 0 1
Warnings 0 0 0
Skipped 3 3 0
Critical bugs 1 (CASHIER VS EMPLOYEES API) 0 1
HIGH bugs 1 («Нет ни одной единицы измерения для нового tenant») 1 («Не удалось создать product №1: нет штрихкода») переехал на новый блокер
Logic gaps 3 1 2

Что починено

  • Fix 1 — step05: /api/me теперь содержит Identity-role Cashier (раньше: no Identity roles); GET /api/organization/employees для Cashier → 403 (раньше: 200). Все 3 проверки step05 ✓.
  • Fix 2 — step01: новая проверка «Невалидный phone отвергается → 400» ✓. Серверная KZ-ФЛК +7 700 ... прошита на SuperAdmin/Counterparty/Employee endpoint'ах.
  • Fix 3 — step08: справочник единиц измерения теперь глобальный, новая орга получает 5 active globals через junction org_units_of_measure сразу при создании. Bug «Нет ни одной единицы измерения для нового tenant» из baseline исчез.

Остающийся блокер (не в scope этих фиксов)

  • [08] Создание product требует обязательный штрихкод400 {"error":"У товара должен быть хотя бы один штрихкод."}. e2e-сценарий не передавал barcode (передавал null). Это либо баг ProductsController (требует штрихкод даже когда не нужно), либо вопрос к e2e-сценарию (надо генерить barcode). Из-за этого step09/11/12 остаются skip (нет supplyId / saleLines).

✓ Step step01_create_organization: SuperAdmin создаёт «Test Shop {timestamp}» (KZ, KZT, ФЛК телефона)

Длительность: 2248мс

Тип Проверка Результат
api POST /api/super-admin/organizations → 200 ✓ org=Test Shop 1778186025272
api GET /api/super-admin/organizations включает созданную org
api Невалидный phone отвергается ✓ 400

✓ Step step02_create_first_admin: SuperAdmin создаёт первого Admin сотрудника организации (Employee + AppUser)

Длительность: 690мс

Тип Проверка Результат
api Temp password возвращён CreateOrgResult ✓ len=12
db employees содержит ровно 1 запись для новой org ✓ count=1
db AspNetUserRoles содержит role=Admin для нового user ✓ Admin

✓ Step step03_login_as_admin: Логин под admin (не SuperAdmin override) — JWT с org_id и role=Admin

Длительность: 598мс

Тип Проверка Результат
api /connect/token password-grant выдал токен
api /api/me содержит role=Admin ✓ Admin
api /api/me содержит правильный orgId ✓ 6a62ba12-13f8-4c96-ab40-0d6c6a61d0d8

✓ Step step04_create_storekeeper_and_cashier: Admin создаёт Storekeeper и Cashier через /settings/employees

Длительность: 2065мс

Тип Проверка Результат
api employee-roles list ✓ 200, total=3
api Системная роль «Кладовщик» существует
api Системная роль «Кассир» существует
api POST /api/organization/employees (Кладовщик) ✓ 200
api POST /api/organization/employees (Кассир) ✓ 200
db employees total = 3 (admin + keeper + cashier) ✓ count=3
api Невалидный email отвергается при createAccount ✓ 400

✓ Step step05_login_as_cashier: Логин под Cashier — role-guard проверяется (sidebar/role guard)

Длительность: 602мс

Тип Проверка Результат
api /api/me содержит роль соответствующую системной Cashier ✓ Cashier
api Cashier → GET /api/organization/employees → 403 ✓ 403
api Cashier → GET /api/sales/retail-sales — доступен ✓ 404

✓ Step step06_create_counterparty: Admin создаёт «ТОО Тест Поставщик» (БИН + телефон)

Длительность: 678мс

Тип Проверка Результат
api POST /api/catalog/counterparties ✓ 201

✓ Step step07_ensure_main_store: Проверить что есть main store (из bootstrap), иначе создать

Длительность: 128мс

Тип Проверка Результат
api GET /api/catalog/stores ✓ 200
db Main store существует (от bootstrap) ✓ Основной склад

✓ Step step08_create_supply: Admin создаёт Supply Draft (3-5 товаров) и проводит (Posted)

Длительность: 548мс

◯ Step step09_check_stock_after_supply: GET /api/inventory/stock — quantity увеличился на supplied amount

Длительность: 0мс

✓ Step step10_ensure_retail_point: Проверить или создать розничную точку (кассу)

Длительность: 137мс

Тип Проверка Результат
api RetailPoint существует Касса 1

◯ Step step11_create_retail_sale: Admin создаёт RetailSale, 2 позиции из приёмки, cash, Post

Длительность: 0мс

◯ Step step12_check_stock_after_sale: GET /api/inventory/stock — quantity уменьшился на sold amount

Длительность: 0мс

Summary

  • Passed: 9
  • Failed: 0
  • Warnings: 0
  • Skipped: 3

Critical bugs

HIGH

  • [08] Не удалось создать product №1
    • 400 {"error":"У товара должен быть хотя бы один штрихкод."}

Logic gaps

  • Реестр products tenant-scoped: новая org стартует с пустым каталогом, хотя в БД лежат products другой org. e2e-сценарий компенсирует созданием 3 products через API.