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)
143 lines
6.9 KiB
Markdown
143 lines
6.9 KiB
Markdown
# 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.
|