Files
cyclone/backend/tests/test_db.py
T

42 lines
1.2 KiB
Python

"""Tests for the SQLAlchemy engine + session factory + init_db."""
from __future__ import annotations
from pathlib import Path
import pytest
import sqlalchemy as sa
from cyclone import db
@pytest.fixture(autouse=True)
def _isolated_db(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
"""Point CYCLONE_DB_URL at a temp file for every test in this module."""
url = f"sqlite:///{tmp_path}/test.db"
monkeypatch.setenv("CYCLONE_DB_URL", url)
# Reset module-level state so each test gets a fresh engine.
db._reset_for_tests()
def test_init_db_creates_engine() -> None:
db.init_db()
assert db.engine() is not None
assert isinstance(db.engine(), sa.Engine)
def test_init_db_creates_all_tables() -> None:
db.init_db()
# Probe known future table names from the schema. We use
# `inspect` rather than importing the model class to keep this
# test independent of model implementation.
inspector = sa.inspect(db.engine())
# In Task 3 we add a Claim table; until then this is empty.
assert isinstance(inspector.get_table_names(), list)
def test_session_local_returns_session() -> None:
db.init_db()
with db.SessionLocal()() as s:
assert s.is_active