| | """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 |
| |
|