import logging from sqlalchemy import create_engine, event from sqlalchemy.orm import sessionmaker, clear_mappers from sqlalchemy.pool import StaticPool from app.core.database import Base logger = logging.getLogger(__name__) def get_test_engine(): """Create an SQLite in-memory engine specifically for testing""" test_engine = create_engine( "sqlite:///:memory:", connect_args={"check_same_thread": False}, poolclass=StaticPool, # Use static pool for in-memory testing echo=False ) return test_engine def setup_test_db(): """Create a test database and session factory""" # Create a new engine for this test run test_engine = get_test_engine() # Create tables Base.metadata.create_all(test_engine) # Create session factory TestingSessionLocal = sessionmaker( autocommit=False, autoflush=False, bind=test_engine, expire_on_commit=False ) return test_engine, TestingSessionLocal def teardown_test_db(engine): """Clean up after tests""" # Drop all tables Base.metadata.drop_all(engine) # Dispose of engine engine.dispose()