Files
ss-tools/backend/conftest.py

45 lines
2.0 KiB
Python

# conftest.py at backend root
# Prevents pytest collection errors caused by duplicate test module names
# between the root tests/ directory and co-located src/<module>/__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"),
]