import pytest from fastapi.testclient import TestClient from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy.pool import StaticPool from backend.database import Base, get_db from backend.main import app from backend.auth import get_current_admin, TokenData from datetime import datetime, timezone # Use in-memory SQLite for tests SQLALCHEMY_DATABASE_URL = "sqlite://" engine = create_engine( SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False}, poolclass=StaticPool, ) TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) @pytest.fixture(scope="function", autouse=True) def mock_scheduler(): from backend.scheduler import scheduler if scheduler.running: scheduler.shutdown() yield if scheduler.running: scheduler.shutdown() @pytest.fixture(scope="function") def db(): Base.metadata.create_all(bind=engine) session = TestingSessionLocal() try: yield session finally: session.close() Base.metadata.drop_all(bind=engine) @pytest.fixture(scope="function") def client(db): def override_get_db(): try: yield db finally: pass # Mock admin user with valid TokenData def override_get_current_admin(): return TokenData( sub=1, username="admin", role="admin", exp=datetime.now(timezone.utc) ) app.dependency_overrides[get_db] = override_get_db app.dependency_overrides[get_current_admin] = override_get_current_admin with TestClient(app) as c: yield c app.dependency_overrides.clear()