Search_Engine / tests /conftest.py
IndraneelKumar
Initial search engine commit
266d7bc
Raw
History Blame Contribute Delete
2.34 kB
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")