"""Test configuration and fixtures.""" import pytest from sqlmodel import Session, SQLModel, create_engine from sqlmodel.pool import StaticPool from fastapi.testclient import TestClient from src.main import app from src.api.deps import get_db from src.models.user import User from src.models.task import Task @pytest.fixture(name="session") def session_fixture(): """Create a fresh database session for each test.""" engine = create_engine( "sqlite:///:memory:", connect_args={"check_same_thread": False}, poolclass=StaticPool, ) SQLModel.metadata.create_all(engine) with Session(engine) as session: yield session @pytest.fixture(name="client") def client_fixture(session: Session): """Create a test client with overridden database session.""" def get_db_override(): yield session app.dependency_overrides[get_db] = get_db_override client = TestClient(app) yield client app.dependency_overrides.clear() @pytest.fixture(name="test_user") def test_user_fixture(session: Session): """Create a test user.""" user = User( email="test@example.com", name="Test User" ) session.add(user) session.commit() session.refresh(user) return user @pytest.fixture(name="test_task") def test_task_fixture(session: Session, test_user: User): """Create a test task.""" task = Task( user_id=test_user.id, title="Test Task", description="Test Description", completed=False ) session.add(task) session.commit() session.refresh(task) return task