test(rbac): test-mode bypass to revive api/v1 suite (CI-rehab 1/3) #1030

Merged
bot-backend merged 1 commit from chore/test-mode-rbac-bypass into main 2026-06-03 13:29:25 +00:00
Collaborator

CI-rehab 1/3: test-mode RBAC bypass — оживляет api/v1 тест-сьют.

Весь api/v1-сьют бьёт по app мимо Caddy → rbac_guard 401-ил каждый authed-запрос (нет X-Authenticated-User) → 112 тестов red, сьют по сути мёртв (так #994 district-500 и ушёл незамеченным). Добавлен settings.testing (default False — прод RBAC не тронут) + строго-gated bypass в начале rbac_guard; tests/conftest.py включает его (env TESTING=1 + settings.testing=True до импорта app).

Security: bypass срабатывает ТОЛЬКО при settings.testing=True, который в проде не ставится нигде (default False; флипает лишь conftest). RBAC 401/403 логика покрыта test_rbac.py (своя копия middleware, на флаг не смотрит).

Эффект: 112→42 failed, 1590→1660 passed. Остаток 42 (+5 mv_layout env-errors) = дрейф моков/ассертов + env-тесты → CI-rehab 2/3. Фундамент под реальный Forgejo pytest-гейт (3/3).

Refs #944.

**CI-rehab 1/3: test-mode RBAC bypass — оживляет api/v1 тест-сьют.** Весь api/v1-сьют бьёт по `app` мимо Caddy → `rbac_guard` 401-ил каждый authed-запрос (нет X-Authenticated-User) → **112 тестов red**, сьют по сути мёртв (так #994 district-500 и ушёл незамеченным). Добавлен `settings.testing` (**default False — прод RBAC не тронут**) + строго-gated bypass в начале rbac_guard; `tests/conftest.py` включает его (env TESTING=1 + settings.testing=True до импорта app). **Security:** bypass срабатывает ТОЛЬКО при settings.testing=True, который в проде не ставится нигде (default False; флипает лишь conftest). RBAC 401/403 логика покрыта `test_rbac.py` (своя копия middleware, на флаг не смотрит). **Эффект:** 112→42 failed, 1590→1660 passed. Остаток 42 (+5 mv_layout env-errors) = дрейф моков/ассертов + env-тесты → CI-rehab 2/3. Фундамент под реальный Forgejo pytest-гейт (3/3). Refs #944.
bot-backend added 1 commit 2026-06-03 13:29:23 +00:00
test(rbac): test-mode bypass so api/v1 suite can authenticate (CI-rehab 1/3)
All checks were successful
Deploy / changes (push) Successful in 5s
Deploy / build-frontend (push) Has been skipped
Deploy / build-backend (push) Successful in 1m35s
Deploy / build-worker (push) Successful in 2m49s
Deploy / deploy (push) Successful in 1m13s
0247f13fb6
The whole backend api/v1 test suite hits `app` via TestClient mimo Caddy, so
rbac_guard (app/main.py) 401'd every authed request (no X-Authenticated-User)
— 112 tests red, the suite effectively dead (which is how #994's district 500
shipped uncaught). Add `settings.testing` (default False — prod RBAC untouched)
+ a strictly-gated bypass at the top of rbac_guard; tests/conftest.py enables it
(env TESTING=1 + settings.testing=True before app import).

Security: bypass fires ONLY when settings.testing is True, which is set NOWHERE
in prod (default False; only tests/conftest.py flips it). RBAC's 401/403 logic
stays covered by tests/test_rbac.py (its own middleware copy, ignores the flag).

Effect: 112 → 42 failed, 1590 → 1660 passed. Remaining 42 (+5 mv_layout env
errors) are stale-mock/assertion drift + env-required tests — fixed in CI-rehab
2/3. Foundation for a real Forgejo pytest gate (3/3).

Refs #944.
bot-backend merged commit 0247f13fb6 into main 2026-06-03 13:29:25 +00:00
bot-backend deleted branch chore/test-mode-rbac-bypass 2026-06-03 13:29:25 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#1030
No description provided.