"""Unit tests: engine/session helpers (no live database required). Creating a SQLAlchemy engine/session is lazy — no connection opens until the first query — so these run anywhere. """ from __future__ import annotations from sqlalchemy import Engine from sqlalchemy.orm import Session from app import db as app_db def test_engine_and_session_factory_are_lazy() -> None: assert isinstance(app_db.engine, Engine) session = app_db.SessionLocal() try: assert isinstance(session, Session) finally: session.close() def test_get_db_yields_session_and_closes_generator() -> None: gen = app_db.get_db() session = next(gen) assert isinstance(session, Session) session.close() gen.close() # exercises the finally: db.close() def test_db_available_true_on_select_one(monkeypatch) -> None: class _FakeConn: def __enter__(self): return self def __exit__(self, *exc: object) -> None: return None def execute(self, _stmt: object) -> None: return None class _FakeEngine: def connect(self) -> _FakeConn: return _FakeConn() monkeypatch.setattr(app_db, "engine", _FakeEngine()) assert app_db.db_available() is True def test_db_available_false_on_error(monkeypatch) -> None: class _BrokenEngine: def connect(self) -> object: raise ConnectionError("db is down") monkeypatch.setattr(app_db, "engine", _BrokenEngine()) assert app_db.db_available() is False