Spaces:
Sleeping
Sleeping
| import os | |
| # Set env vars BEFORE importing app settings | |
| os.environ["DATABASE_URL"] = "sqlite:///./test.db" | |
| os.environ["SECRET_KEY"] = "testsecretkey" | |
| os.environ["ALGORITHM"] = "HS256" | |
| import pytest | |
| from typing import Generator | |
| from fastapi.testclient import TestClient | |
| from sqlalchemy import create_engine | |
| from sqlalchemy.orm import sessionmaker, Session | |
| from sqlalchemy.pool import StaticPool | |
| import sys | |
| print(f"DEBUG: sys.path: {sys.path}") | |
| from app.main import app | |
| from app.models.base import Base, get_db | |
| from app.core.config import get_settings | |
| # Ensure settings are loaded with env vars overrides | |
| get_settings.cache_clear() | |
| # Use in-memory SQLite for testing | |
| SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db" | |
| engine = create_engine( | |
| SQLALCHEMY_DATABASE_URL, | |
| connect_args={"check_same_thread": False}, | |
| poolclass=StaticPool, | |
| ) | |
| TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) | |
| def db_engine(): | |
| Base.metadata.create_all(bind=engine) | |
| yield engine | |
| Base.metadata.drop_all(bind=engine) | |
| def db(db_engine) -> Generator[Session, None, None]: | |
| connection = db_engine.connect() | |
| transaction = connection.begin() | |
| session = TestingSessionLocal(bind=connection) | |
| yield session | |
| session.close() | |
| transaction.rollback() | |
| connection.close() | |
| def client(db) -> Generator[TestClient, None, None]: | |
| def override_get_db(): | |
| try: | |
| yield db | |
| finally: | |
| pass | |
| app.dependency_overrides[get_db] = override_get_db | |
| with TestClient(app) as c: | |
| yield c | |
| app.dependency_overrides.clear() | |