# tests/conftest.py - Updated main conftest with core fixtures only import pytest from fastapi.testclient import TestClient from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy.pool import StaticPool from app.core.database import Base, get_db from main import app # Import all models to ensure they're registered with Base metadata from models.database.marketplace import MarketplaceImportJob from models.database.product import Product from models.database.shop import Shop, ShopProduct from models.database.stock import Stock from models.database.user import User # Use in-memory SQLite database for tests SQLALCHEMY_TEST_DATABASE_URL = "sqlite:///:memory:" @pytest.fixture(scope="session") def engine(): """Create test database engine""" return create_engine( SQLALCHEMY_TEST_DATABASE_URL, connect_args={"check_same_thread": False}, poolclass=StaticPool, echo=False, # Set to True for SQL debugging ) @pytest.fixture(scope="session") def testing_session_local(engine): """Create session factory for tests""" return sessionmaker(autocommit=False, autoflush=False, bind=engine) @pytest.fixture(scope="function") def db(engine, testing_session_local): """Create a database session for direct database operations""" # Create all tables Base.metadata.create_all(bind=engine) # Create session db_session = testing_session_local() try: yield db_session finally: db_session.close() # Clean up all data after each test Base.metadata.drop_all(bind=engine) Base.metadata.create_all(bind=engine) @pytest.fixture(scope="function") def client(db): """Create a test client with database dependency override""" # Override the dependency to use our test database def override_get_db(): try: yield db finally: pass # Don't close here, the db fixture handles it app.dependency_overrides[get_db] = override_get_db try: client = TestClient(app) yield client finally: # Clean up the dependency override if get_db in app.dependency_overrides: del app.dependency_overrides[get_db] # Cleanup fixture to ensure clean state @pytest.fixture(autouse=True) def cleanup(): """Automatically clean up after each test""" yield # Clear any remaining dependency overrides app.dependency_overrides.clear() # Import fixtures from fixture modules pytest_plugins = [ "tests.fixtures.auth_fixtures", "tests.fixtures.product_fixtures", "tests.fixtures.shop_fixtures", "tests.fixtures.marketplace_fixtures", ]