8fc3d9adda
- New test_existing_endpoints_require_auth.py: spot-check that existing /api/* endpoints now require auth (gated via Depends(matrix_gate)) when AUTH_DISABLED is False. Health remains public. - conftest.py: flip AUTH_DISABLED=True for the suite so the legacy pre-auth tests keep passing without login. Auth tests flip it back off via their own autouse fixture (now patched to use monkeypatch for cleanup). Verified: 53 auth tests pass; 222 pre-existing non-auth failures are unchanged.
51 lines
2.0 KiB
Python
51 lines
2.0 KiB
Python
"""Per-test database setup for the Cyclone test suite.
|
|
|
|
Every test gets a fresh SQLite DB at ``tmp_path/test.db`` so the suite
|
|
can run in parallel and never touches the user's ``~/.local/share/cyclone``
|
|
database. ``db.init_db()`` is idempotent — tests that already call it
|
|
explicitly are unaffected (the second call short-circuits).
|
|
|
|
This fixture exists because the SQLAlchemy-backed ``CycloneStore``
|
|
requires the engine to be initialized before any DB access, whereas the
|
|
old in-memory store did not. Adding the init here keeps existing test
|
|
modules (test_api.py, test_api_835.py, test_api_gets.py,
|
|
test_api_parse_persists.py) working unchanged.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def _auto_init_db(tmp_path, monkeypatch):
|
|
"""Point CYCLONE_DB_URL at a per-test SQLite file and init the schema.
|
|
|
|
Also wires a fresh ``EventBus`` onto ``app.state`` because ``TestClient``
|
|
does not invoke the FastAPI lifespan handler unless used as a context
|
|
manager. The bus is reset between tests so subscribers don't leak.
|
|
|
|
Auth gating is enabled at the router/endpoint level via the
|
|
``Depends(matrix_gate)`` wiring in ``cyclone.api``. The auth tests
|
|
(``test_auth_*``) explicitly flip ``AUTH_DISABLED = False`` and
|
|
authenticate via the public login route to exercise the real
|
|
auth path. Every other test — the original test suite predates
|
|
auth — gets ``AUTH_DISABLED = True`` here so the existing tests
|
|
keep working without each one having to login first.
|
|
"""
|
|
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()
|
|
deps.AUTH_DISABLED = True
|
|
try:
|
|
yield
|
|
finally:
|
|
deps.AUTH_DISABLED = False
|
|
app.state.event_bus = None
|
|
db._reset_for_tests() |