Spaces:
Sleeping
Sleeping
| import os | |
| import pytest | |
| from sqlmodel import SQLModel, Session, create_engine | |
| from fastapi.testclient import TestClient | |
| # Use SQLite in-memory DB for tests — never touches PostgreSQL | |
| TEST_DATABASE_URL = "sqlite:///./test_geminirag.db" | |
| os.environ.setdefault("DATABASE_URL", TEST_DATABASE_URL) | |
| os.environ.setdefault("REDIS_URL", "redis://localhost:6379/0") | |
| os.environ.setdefault("GEMINI_API_KEY", "test_key_placeholder_for_tests") | |
| os.environ.setdefault("SECRET_KEY", "test_secret_key_minimum_32_chars_here!!") | |
| os.environ.setdefault("CHROMA_HOST", "localhost") | |
| os.environ.setdefault("CHROMA_PORT", "8001") | |
| def engine(): | |
| eng = create_engine(TEST_DATABASE_URL, connect_args={"check_same_thread": False}) | |
| SQLModel.metadata.create_all(eng) | |
| yield eng | |
| SQLModel.metadata.drop_all(eng) | |
| eng.dispose() | |
| def db(engine): | |
| with Session(engine) as session: | |
| yield session | |
| def client(engine): | |
| # engine fixture runs first, ensuring tables exist in test_geminirag.db | |
| # The app's get_engine() will connect to the same SQLite file | |
| import app.models.db as _db | |
| _db._engine = engine # point app to the same engine instance | |
| from app.main import app | |
| # Reset rate limiter storage so each test starts with a clean slate | |
| from app.limiter import limiter | |
| try: | |
| limiter._storage.reset() | |
| except Exception: | |
| pass | |
| with TestClient(app) as c: | |
| yield c | |
| _db._engine = None # reset after test | |