fix(api): use request.app.state in inbox endpoints; preserve dict HTTPException detail
- inbox_lanes, inbox_dismiss_candidates, inbox_export_csv: switch module-level 'app' to per-request 'request.app' so per-endpoint state stays consistent with the test's TestClient target across importlib.reload() (test_api.py::test_cors_extra_origins_via_env reloads the api module to mutate CORS allow-lists; pre-reload endpoints then mutate the wrong app instance). - _http_exc_handler: when HTTPException.detail is a dict, wrap under 'detail' so the standard envelope stays stable and callers can branch on body['detail']['error']. - conftest._auto_init_db: re-resolve cyclone.api.app each fixture invocation (instead of caching at module load) so the reload pattern doesn't leave event_bus set on a stale app. - test_acks.test_migration_latest_idempotent_on_fresh_db: bump user_version assertion from 12 to 14 after auth migration renumber (0013 users+sessions, 0014 audit_log.user_id). Also installs sqlcipher3 + paramiko into the backend venv so the capability tests can run; both modules were optional deps that test_db_crypto and test_sftp_paramiko assume are present. Backend test results: 1008 passed, 9 skipped (gitignored prodfile fixtures), 0 failed.
This commit is contained in:
@@ -35,17 +35,23 @@ def _auto_init_db(tmp_path, monkeypatch):
|
||||
"""
|
||||
monkeypatch.setenv("CYCLONE_DB_URL", f"sqlite:///{tmp_path}/test.db")
|
||||
from cyclone import db
|
||||
from cyclone.api import app
|
||||
from cyclone.pubsub import EventBus
|
||||
from cyclone.auth import deps
|
||||
|
||||
db._reset_for_tests()
|
||||
db.init_db()
|
||||
app.state.event_bus = EventBus()
|
||||
# Re-resolve `app` each fixture invocation because some tests
|
||||
# (test_cors_extra_origins_via_env) call ``importlib.reload`` on
|
||||
# ``cyclone.api`` to mutate the CORS allow-list. If we cached
|
||||
# the app reference at conftest module load, we'd be setting
|
||||
# ``event_bus`` on a stale instance that no test client is
|
||||
# actually using.
|
||||
from cyclone import api as _api_mod
|
||||
_api_mod.app.state.event_bus = EventBus()
|
||||
deps.AUTH_DISABLED = True
|
||||
try:
|
||||
yield
|
||||
finally:
|
||||
deps.AUTH_DISABLED = False
|
||||
app.state.event_bus = None
|
||||
_api_mod.app.state.event_bus = None
|
||||
db._reset_for_tests()
|
||||
Reference in New Issue
Block a user