Search_Engine / tests /conftest.py
IndraneelKumar
Initial search engine commit
266d7bc
import shutil
import sys
from collections.abc import Generator
from pathlib import Path
import pytest
from sqlalchemy import create_engine
from sqlalchemy.engine import Engine
from sqlalchemy.orm import Session as SQLAlchemySession
from sqlalchemy.orm import sessionmaker
# Add src to Python path for direct imports
sys.path.insert(0, str(Path(__file__).parent.parent / "src"))
from config import settings
from utils.logger_util import setup_logging
logger = setup_logging()
db = settings.supabase_db
DATABASE_URL = (
f"postgresql://{db.user}:{db.password.get_secret_value()}@{db.host}:{db.port}/{db.name}"
)
@pytest.fixture(scope="session")
def db_engine() -> Generator[Engine, None, None]:
"""Create a SQLAlchemy engine for the test database session.
Disposes the engine after the test session completes.
Args:
None
Yields:
Engine: A SQLAlchemy engine connected to the test database.
"""
logger.info("Creating test database engine")
engine = create_engine(DATABASE_URL)
yield engine
logger.info("Disposing test database engine")
engine.dispose()
@pytest.fixture(scope="function")
def db_session(db_engine: Engine) -> Generator[SQLAlchemySession, None, None]:
"""Provide a SQLAlchemy session for a single test function.
Closes the session after the test finishes.
Args:
db_engine (Engine): The SQLAlchemy engine to bind the session to.
Yields:
SQLAlchemySession: A SQLAlchemy session connected to the test database.
"""
logger.info("Creating test database session")
Session = sessionmaker(bind=db_engine)
session = Session()
yield session
session.close()
logger.info("Closed test database session")
@pytest.fixture(scope="function", autouse=True)
def clear_prefect_cache() -> Generator[None, None, None]:
"""Automatically clear Prefect cache before and after each test function
to prevent interference between tests.
Args:
None
Yields:
None
"""
prefect_dir = Path(".prefect")
logger.debug("Clearing Prefect cache before test")
if prefect_dir.exists():
shutil.rmtree(prefect_dir, ignore_errors=True)
yield
if prefect_dir.exists():
shutil.rmtree(prefect_dir, ignore_errors=True)
logger.debug("Cleared Prefect cache after test")