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

143 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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.