food-market/tests/e2e/reports/multi-tenant-isolation-2026-05-26T06-28-13-936Z.md
nns f2f64646b1 docs(e2e): финальный системный отчёт 2026-05-26 — все 9 сценариев зелёные
Сводный отчёт systemic-2026-05-26.md + зелёные прогоны всех сценариев
(82 шага, 0 падений). За сессию исправлено: refresh-rotation (TokenId +
zero reuse-leeway), сериализуемое проведение приёмки против lost update,
MoySklad BaseUrl в конфиг. Покрыты впервые: конкурентность приёмок,
дашбордная выручка, импорт MoySklad (идемпотентность/маппинг). Зафиксированы
gap'ы по нереализованным отчётам (профит/ABC/экспорт, ТЗ 2.12).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-26 11:30:46 +05:00

134 lines
5.8 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: multi-tenant-isolation
Запущен: 2026-05-26T06:28:08.807Z
Длительность: 3.6с
**Итог:** 12 ✓ / 0 ✗ / 0 ⚠ / 0 ◯ (всего 12)
## ✓ Step step01_create_two_orgs: SuperAdmin создаёт две независимые орги Alpha и Beta (каждая со своим админом)
Длительность: 1218мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Создана Alpha | ✓ f37d8c51-9934-4d18-a285-7ba25dfc60be |
| api | Создана Beta | ✓ c372ef64-2328-4a19-af3c-90a058f44012 |
| api | orgId Alpha ≠ orgId Beta | ✓ |
## ✓ Step step02_login_both_admins: Логин под admin Alpha и admin Beta — получаем два разных org_id в JWT
Длительность: 792мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Login Alpha admin → 200 | ✓ |
| api | Login Beta admin → 200 | ✓ |
| api | Alpha orgId == ctx.alpha.orgId | ✓ claim=f37d8c51-9934-4d18-a285-7ba25dfc60be |
| api | Beta orgId == ctx.beta.orgId | ✓ claim=c372ef64-2328-4a19-af3c-90a058f44012 |
## ✓ Step step03_seed_data_in_alpha: Admin Alpha создаёт counterparty + product → запоминаем их ID
Длительность: 160мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Alpha создаёт counterparty | ✓ 8103d4ec-e35c-4fd4-8214-931921a86783 |
| api | Alpha создаёт product | ✓ 647f7992-3df1-460c-845c-6ed68bc1903b |
## ✓ Step step04_beta_cannot_read_alpha: Admin Beta GET /api/catalog/counterparties/{alphaId} и /products/{alphaId} → 404
Длительность: 159мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Beta GET counterparties/{alphaId} → 404 | ✓ actual=404 |
| api | Beta GET products/{alphaId} → 404 | ✓ actual=404 |
## ✓ Step step05_beta_cannot_list_alpha_data: Admin Beta GET /api/catalog/counterparties|/products → пустые списки (нет данных Alpha)
Длительность: 207мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Beta GET counterparties не содержит Alpha counterparty | ✓ всего=0, утечек=0 |
| api | Beta GET products не содержит Alpha product | ✓ всего=0, утечек=0 |
## ✓ Step step06_beta_cannot_modify_alpha: Admin Beta PUT/DELETE /api/catalog/products/{alphaId} → 404 (не 200, не 403)
Длительность: 172мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Beta PUT products/{alphaId} с валидным телом → 404/403 | ✓ actual=404 {"type":"https://tools.ietf.org/html/rfc9110#section-15.5.5","title":"Not Found","status":404,"trace |
| api | Beta DELETE products/{alphaId} → 404/403 | ✓ actual=404 |
## ✓ Step step07_beta_cannot_link_to_alpha: Admin Beta POST product с DefaultSupplierId=alphaCounterpartyId → 400 (FK через query filter)
Длительность: 38мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Beta POST product с supplierId Alpha → 4xx | ✓ actual=400 |
## ✓ Step step08_beta_cannot_forge_org_override: Admin Beta с заголовком X-Org-Override:{alphaId} → запрос всё равно идёт от Beta (не SuperAdmin)
Длительность: 21мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Beta admin + X-Org-Override → 404/403 | ✓ actual=404 |
## ✓ Step step09_superadmin_sees_both: SuperAdmin без override GET /api/super-admin/organizations → видит и Alpha и Beta
Длительность: 18мс
| Тип | Проверка | Результат |
|---|---|---|
| api | SuperAdmin видит Alpha в списке орг | ✓ total=2 |
| api | SuperAdmin видит Beta в списке орг | ✓ |
## ✓ Step step10_superadmin_readonly_override: SuperAdmin с X-Org-Override:{alphaId} → GET товаров Alpha (200), PUT/POST без reason → 403
Длительность: 30мс
| Тип | Проверка | Результат |
|---|---|---|
| api | SuperAdmin+override GET → 200 | ✓ actual=200 |
| api | SuperAdmin+override PUT без reason → 403 | ✓ actual=403 |
## ✓ Step step11_superadmin_edit_override_with_reason: SuperAdmin с X-Org-Override + X-Org-Override-Reason → PUT 200 + запись в audit_log
Длительность: 504мс
| Тип | Проверка | Результат |
|---|---|---|
| api | SuperAdmin+override+reason PUT counterparty → 200/204 | ✓ actual=204 |
| db | Counterparty.Name изменено в БД | ✓ name=edited-by-superadmin-1779776888807 |
| db | super_admin_audit_log выросло | ✓ before=2 after=3 |
## ✓ Step step12_stock_isolation: Остатки Alpha и Beta не смешиваются — Supply в Alpha не появляется в /inventory/stock у Beta
Длительность: 267мс
| Тип | Проверка | Результат |
|---|---|---|
| api | Alpha создаёт supply | ✓ actual=201 {"id":"0aacfaea-1785-4761-8524-bc5bde177f0b","number":"П-2026-000001","date":"2026-05-26T06:28:13.685Z","status":0,"supp |
| api | Alpha проводит supply | ✓ actual=204 |
| api | Beta /inventory/stock не содержит Alpha product | ✓ total=0, утечка=нет |
| api | Beta /inventory/movements не содержит Alpha movement | ✓ total=0, утечка=нет |
## Summary
- Passed: 12
- Failed: 0
- Warnings: 0
- Skipped: 0
## Critical bugs
Нет.
## Logic gaps
- ProductsController.Put в режиме X-Org-Override роняет DbUpdateConcurrencyException при пересылке prices/barcodes — merge-логика не учитывает override-режим. Ремонт PUT product через override-консоль невозможен.