test(tradein): изолировать test_rbac.py от состояния реестра (#3316)
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 11s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 5m6s
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 11s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 5m6s
CI-красное на голове ветки: 4 теста в tests/test_rbac.py ждали YAML-роль (kopylov=pilot, user1=pilot), а в CI-базе реестр засеян миграцией 193 (kopylov=manager, user*=employee) — DB-first резолвер честно отдавал роль из БД. Локально те же тесты были зелёными ровно потому, что БД нет и работал YAML-fallback: результат файла зависел от ОКРУЖЕНИЯ, а такой тест не проверяет ничего. Чинится не подгонкой чисел в ассертах, а изоляцией: файл проверяет ИМЕННО legacy-путь roles.yaml (разбор файла, globs, guard и /me на trusted-header), и теперь заявляет это явно — autouse-фикстура `_legacy_yaml_only` глушит реестр (`_registry_role` → None). Ассерты на YAML-роли после этого законны в любом окружении. Приоритет реестра, эквивалентность scope employee↔pilot и конфигурация kopylov (DB manager + YAML pilot) покрыты отдельно — tests/test_role_single_source.py. Проверено обоими способами: полный `pytest tests` без сида и он же с плагином-имитацией засеянного реестра (подменяется тот же шов, что и в проде, `identity_store.identity_session`) — 5290 passed, 35 skipped в обоих.
This commit is contained in:
parent
cde95aa9f6
commit
18e0f1d999
1 changed files with 17 additions and 0 deletions
|
|
@ -42,6 +42,23 @@ def _reset_auth_cache() -> None:
|
|||
auth_mod.reset_cache_for_tests()
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def _legacy_yaml_only(monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
"""Реестр в ЭТОМ файле молчит — здесь проверяется legacy-путь roles.yaml.
|
||||
|
||||
#3316 сделал `get_role` DB-first (реестр → YAML-fallback), и без этой
|
||||
изоляции результат файла зависел бы от ОКРУЖЕНИЯ: локально без БД шла
|
||||
YAML-ветка и всё было зелено, а в CI, где реестр засеян миграцией 193
|
||||
(kopylov=manager, user*=employee), те же ассерты краснели. Тест, который
|
||||
отвечает по-разному в двух окружениях, не проверяет ничего.
|
||||
|
||||
Здесь закреплена ровно YAML-семантика (разбор файла, globs, поведение
|
||||
guard'а и /me на trusted-header пути); DB-first, приоритет реестра и
|
||||
эквивалентность scope employee↔pilot покрыты tests/test_role_single_source.py.
|
||||
"""
|
||||
monkeypatch.setattr(auth_mod, "_registry_role", lambda username: None)
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Test app — использует РЕАЛЬНЫЙ rbac_guard (app/core/rbac.py), а не копию.
|
||||
# ---------------------------------------------------------------------------
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue