from collections.abc import Generator import pytest from fastapi.testclient import TestClient from sqlalchemy import create_engine from sqlalchemy.orm import Session, sessionmaker from sqlalchemy.pool import StaticPool from app.auth.dependencies import get_current_user from app.db.session import get_db from app.main import app from app.models import Base, User @pytest.fixture def db_session() -> Generator[Session, None, None]: engine = create_engine( "sqlite://", connect_args={"check_same_thread": False}, poolclass=StaticPool, ) Base.metadata.create_all(bind=engine) testing_session_local = sessionmaker(bind=engine, autoflush=False, autocommit=False) with testing_session_local() as session: yield session Base.metadata.drop_all(bind=engine) engine.dispose() @pytest.fixture def client(db_session: Session) -> Generator[TestClient, None, None]: def override_get_db() -> Generator[Session, None, None]: yield db_session def override_current_user() -> User: return User( id=1, email="owner@example.com", display_name="Test Owner", hashed_password="not-used", role="owner", is_active=True, ) app.dependency_overrides[get_db] = override_get_db app.dependency_overrides[get_current_user] = override_current_user with TestClient(app) as test_client: yield test_client app.dependency_overrides.clear()