"""Integration test configuration — uses an in-memory SQLite database. Overrides the FastAPI app's `get_db` dependency to use a fresh in-memory SQLite database for each test, enabling full API integration tests without requiring PostgreSQL. The ORM models use portable column types (see `app/db/types.py`), so `create_all` works against SQLite natively — no JSONB/VECTOR DDL substitution is needed here. """ import pytest from fastapi.testclient import TestClient from sqlalchemy import create_engine, event from sqlalchemy.orm import sessionmaker from sqlalchemy.pool import StaticPool from app.db.database import Base, get_db from app.main import app @pytest.fixture(scope="function") def db_engine(): engine = create_engine( "sqlite://", connect_args={"check_same_thread": False}, poolclass=StaticPool, ) # Enable foreign keys in SQLite (off by default). @event.listens_for(engine, "connect") def set_sqlite_pragma(dbapi_connection, connection_record): cursor = dbapi_connection.cursor() cursor.execute("PRAGMA foreign_keys=ON") cursor.close() Base.metadata.create_all(bind=engine) yield engine Base.metadata.drop_all(bind=engine) @pytest.fixture(scope="function") def db_session(db_engine): SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=db_engine) session = SessionLocal() yield session session.close() @pytest.fixture(scope="function") def client(db_session): """FastAPI TestClient with overridden DB dependency.""" def override_get_db(): try: yield db_session finally: pass app.dependency_overrides[get_db] = override_get_db with TestClient(app) as c: yield c app.dependency_overrides.clear()