food-market/tests/e2e/reports/multi-tenant-isolation-2026-05-26T07-02-11-129Z.md
nns 6098c03e1a docs(e2e): итоговый отчёт 2026-05-26 — 15 сценариев зелёные (124 шага)
Полная регрессия всех сценариев + 6 новых областей этой сессии (employees,
roles, superadmin-console, platform-smtp, auth-password, security-edge).
За день исправлено 4 бага: уволенный сотрудник логинится (P0), конкурентное
проведение приёмки ломает инвариант (critical), refresh не гасится после
ротации (high), change-owner принимал короткий reason (medium). Нереализованный
по ТЗ функционал (отчёты/склад-документы/POS/permission-authz/login-ratelimit)
зафиксирован как Logic gaps.

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

5.8 KiB
Raw Permalink Blame History

E2E report: multi-tenant-isolation

Запущен: 2026-05-26T07:02:06.316Z Длительность: 3.5с

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

✓ Step step01_create_two_orgs: SuperAdmin создаёт две независимые орги Alpha и Beta (каждая со своим админом)

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

Тип Проверка Результат
api Создана Alpha ✓ 8cc09bb5-c09d-4e94-8e6c-9b5256c97381
api Создана Beta ✓ 39c3e0ce-5b42-444e-80ff-9566868ee155
api orgId Alpha ≠ orgId Beta

✓ Step step02_login_both_admins: Логин под admin Alpha и admin Beta — получаем два разных org_id в JWT

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

Тип Проверка Результат
api Login Alpha admin → 200
api Login Beta admin → 200
api Alpha orgId == ctx.alpha.orgId ✓ claim=8cc09bb5-c09d-4e94-8e6c-9b5256c97381
api Beta orgId == ctx.beta.orgId ✓ claim=39c3e0ce-5b42-444e-80ff-9566868ee155

✓ Step step03_seed_data_in_alpha: Admin Alpha создаёт counterparty + product → запоминаем их ID

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

Тип Проверка Результат
api Alpha создаёт counterparty ✓ 8501aa94-8f43-4046-830b-f36ce5797b8e
api Alpha создаёт product ✓ fa1da1ad-69ec-40e8-b1f4-90bf04555cd9

✓ Step step04_beta_cannot_read_alpha: Admin Beta GET /api/catalog/counterparties/{alphaId} и /products/{alphaId} → 404

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

Тип Проверка Результат
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)

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

Тип Проверка Результат
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)

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

Тип Проверка Результат
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)

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

Тип Проверка Результат
api Beta POST product с supplierId Alpha → 4xx ✓ actual=400

✓ Step step08_beta_cannot_forge_org_override: Admin Beta с заголовком X-Org-Override:{alphaId} → запрос всё равно идёт от Beta (не SuperAdmin)

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

Тип Проверка Результат
api Beta admin + X-Org-Override → 404/403 ✓ actual=404

✓ Step step09_superadmin_sees_both: SuperAdmin без override GET /api/super-admin/organizations → видит и Alpha и Beta

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

Тип Проверка Результат
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

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

Тип Проверка Результат
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

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

Тип Проверка Результат
api SuperAdmin+override+reason PUT counterparty → 200/204 ✓ actual=204
db Counterparty.Name изменено в БД ✓ name=edited-by-superadmin-1779778926316
db super_admin_audit_log выросло ✓ before=2 after=3

✓ Step step12_stock_isolation: Остатки Alpha и Beta не смешиваются — Supply в Alpha не появляется в /inventory/stock у Beta

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

Тип Проверка Результат
api Alpha создаёт supply ✓ actual=201 {"id":"28b0326f-a65e-476f-bb69-ef3a61bba0cb","number":"П-2026-000001","date":"2026-05-26T07:02:10.853Z","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-консоль невозможен.