gendesign/backend/tests/conftest.py
Light1YT c8ab3e8be9
All checks were successful
Deploy / changes (push) Successful in 5s
Deploy / build-frontend (push) Has been skipped
Deploy / build-backend (push) Successful in 1m31s
Deploy / build-worker (push) Successful in 2m28s
Deploy / deploy (push) Successful in 1m44s
fix(analyze): district KeyError 500 in #994 persist + revive by-bbox tests
LIVE BUG (from #994, already merged): the analysis_runs persist call-site in
analyze_parcel extracted district via result_payload["district"]["district_name"]
— but a district dict without that key (real data: partial district lookup)
raised KeyError OUTSIDE the best-effort SAVEPOINT (extraction is at the call
site, not inside persist_analysis_run) → 500 on the LIVE /analyze endpoint.
Fix: .get("district_name") → None instead of raising. Caught by reviving the
analyze test suite (below).

Test-infra (the suite was un-runnable, which is why the bug shipped):
- Lazy-import WeasyPrint in layout_tz_pdf.py + trade_in_pdf.py (matches the
  existing report_pdf.py / snapshot_pdf.py pattern). The eager top-level imports
  made `app.main` (→ parcels/trade_in routers) un-importable on hosts without
  WeasyPrint native libs (e.g. macOS dev), breaking pytest COLLECTION of the
  whole api/v1 suite. WeasyPrint is still imported when a PDF is actually rendered.
- tests/conftest.py: autouse fixture clears app.dependency_overrides after each
  test (anti-leak — a leaked get_db override caused real-DB connection attempts).
- test_parcel_by_bbox.py: rewrite get_db mocking from patch("...get_db") (a no-op
  — FastAPI Depends holds the original ref) to app.dependency_overrides[get_db],
  add explicit X-Authenticated-User header (RBAC gate), patch latest_run_dates,
  + a new test asserting last_analysis_date from a latest run (#994). 5/5 green.

NOTE: reviving collectability exposes PRE-EXISTING rot in other api/v1 suites
(analyze/admin/best_layouts: RBAC-header + stale-assertion/mock drift) — those
are NOT regressions from this PR (they were uncollectable before) and are
tracked separately for a deliberate suite-rehab + CI test-gate effort.

Refs #994.
2026-06-03 18:04:37 +05:00

29 lines
1.4 KiB
Python
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.

"""Shared pytest fixtures для backend-сьюта.
NB: RBAC-гейт (app/main.py `rbac_guard`) требует заголовок `X-Authenticated-User`
на любом non-public пути — иначе 401. Тесты, бьющие по `app` через TestClient,
должны слать этот заголовок ЯВНО на запрос (напр. test_parcel_by_bbox), либо
тестировать именно no-auth путь (admin-тесты ждут 401 без заголовка). Глобально
заголовок НЕ инжектим — это ломает тесты, проверяющие отказ авторизации.
"""
from __future__ import annotations
import pytest
@pytest.fixture(autouse=True)
def _clear_dependency_overrides():
"""Сбрасывать app.dependency_overrides после каждого теста (anti-leak).
Тест переопределяет get_db через app.dependency_overrides; без сброса override
течёт в следующий тест → ложные коннекты к реальной БД / флейки. Импорт app
локальный (ленивый) — не тянем тяжёлый app.main при сборе тестов без него.
"""
yield
try:
from app.main import app
app.dependency_overrides.clear()
except Exception:
pass