from __future__ import annotations import os import sys from pathlib import Path import pytest PROJECT_ROOT = Path(__file__).resolve().parents[1] if str(PROJECT_ROOT) not in sys.path: sys.path.insert(0, str(PROJECT_ROOT)) # Avoid package-level knowledge graph initialization during pytest collection. os.environ.setdefault("YUXI_SKIP_APP_INIT", "1") # Pre-populate sys.modules for packages with heavy __init__.py imports # (sklearn/scipy/numpy chain) so that submodules can be imported directly. import types _PACKAGE_DIR = PROJECT_ROOT / "package" for _mod_name in ("yuxi.knowledge", "yuxi.knowledge.parser"): if _mod_name not in sys.modules: _m = types.ModuleType(_mod_name) _m.__path__ = [str(_PACKAGE_DIR / _mod_name.replace(".", os.sep))] _m.__package__ = _mod_name sys.modules[_mod_name] = _m def pytest_configure(config: pytest.Config) -> None: """Register shared markers without binding every test to a live environment.""" config.addinivalue_line("markers", "unit: marks tests that run without live services") config.addinivalue_line("markers", "auth: marks tests that require authentication") config.addinivalue_line("markers", "integration: marks tests that hit the live API service") config.addinivalue_line("markers", "e2e: marks tests that exercise an end-to-end workflow") config.addinivalue_line("markers", "slow: marks tests as slow") pytest_plugins = ["pytest_asyncio"]