# conftest.py at backend root # Prevents pytest collection errors caused by duplicate test module names # between the root tests/ directory and co-located src//__tests__/ directories. # Without this, pytest sees e.g. tests/test_auth.py and src/core/auth/__tests__/test_auth.py # and raises "import file mismatch" because both map to module name "test_auth". import os import tempfile from cryptography.fernet import Fernet # Set ENCRYPTION_KEY for EncryptionManager before any module imports # Required by LLMProviderService which is imported via route modules os.environ.setdefault("ENCRYPTION_KEY", Fernet.generate_key().decode()) # Test DB defaults. This conftest loads BEFORE tests/conftest.py, and the # integration fixture plugins below import src.core.database at module load # time (which requires DATABASE_URL). Same temp-file SQLite scheme as # tests/conftest.py so unit runs keep identical behavior. _TEST_DB_FILE = tempfile.NamedTemporaryFile(suffix="_ss_tools_root.db", delete=False) _TEST_DB_PATH = _TEST_DB_FILE.name _TEST_DB_FILE.close() os.environ.setdefault("DATABASE_URL", f"sqlite:///{_TEST_DB_PATH}") # Integration-test fixture plugins. Declared at the top-level (rootdir) conftest # because pytest >= 8.2 raises an error for `pytest_plugins` defined in a # non-top-level conftest (previously a deprecation warning). Fixture definitions # live in tests/integration/fixtures/*.py and only start Docker containers when a # test actually requests them, so unit runs are unaffected. pytest_plugins = [ "tests.integration.fixtures.network", "tests.integration.fixtures.postgres", "tests.integration.fixtures.pki", "tests.integration.fixtures.config", "tests.integration.fixtures.superset", ] # Files in tests/ that clash with __tests__/ co-located tests. # norecursedirs=["__tests__"] in pyproject.toml prevents collection from src/__tests__/ # at the directory level; this list handles edge cases where explicit file paths # are collected. collect_ignore = [ os.path.join("tests", "schemas", "test_auth.py"), ]