name: multi-tenant-isolation
description: |
  Multi-tenant изоляция. Создаём две организации, проверяем что данные
  одной невидимы и неизменяемы из другой. Проверяем SuperAdmin override
  (read-only без reason, edit-mode с reason). Это критическая проверка
  безопасности — любая утечка между орг'ами это P0 баг.

preconditions:
  reset_db: true
  smoke_login_super_admin: true

steps:
  - id: step01_create_two_orgs
    title: SuperAdmin создаёт две независимые орги Alpha и Beta (каждая со своим админом)
  - id: step02_login_both_admins
    title: Логин под admin Alpha и admin Beta — получаем два разных org_id в JWT
  - id: step03_seed_data_in_alpha
    title: Admin Alpha создаёт counterparty + product → запоминаем их ID
  - id: step04_beta_cannot_read_alpha
    title: Admin Beta GET /api/catalog/counterparties/{alphaId} и /products/{alphaId} → 404
  - id: step05_beta_cannot_list_alpha_data
    title: Admin Beta GET /api/catalog/counterparties|/products → пустые списки (нет данных Alpha)
  - id: step06_beta_cannot_modify_alpha
    title: Admin Beta PUT/DELETE /api/catalog/products/{alphaId} → 404 (не 200, не 403)
  - id: step07_beta_cannot_link_to_alpha
    title: Admin Beta POST product с DefaultSupplierId=alphaCounterpartyId → 400 (FK через query filter)
  - id: step08_beta_cannot_forge_org_override
    title: Admin Beta с заголовком X-Org-Override:{alphaId} → запрос всё равно идёт от Beta (не SuperAdmin)
  - id: step09_superadmin_sees_both
    title: SuperAdmin без override GET /api/super-admin/organizations → видит и Alpha и Beta
  - id: step10_superadmin_readonly_override
    title: SuperAdmin с X-Org-Override:{alphaId} → GET товаров Alpha (200), PUT/POST без reason → 403
  - id: step11_superadmin_edit_override_with_reason
    title: SuperAdmin с X-Org-Override + X-Org-Override-Reason → PUT 200 + запись в audit_log
  - id: step12_stock_isolation
    title: Остатки Alpha и Beta не смешиваются — Supply в Alpha не появляется в /inventory/stock у Beta
