chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
"""Pytest configuration for unity-mcp tests."""
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
from pathlib import Path
|
||||
import pytest
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# Add src directory to Python path so tests can import cli, transport, etc.
|
||||
src_path = Path(__file__).parent.parent / "src"
|
||||
if str(src_path) not in sys.path:
|
||||
sys.path.insert(0, str(src_path))
|
||||
|
||||
|
||||
def _safe_reset_telemetry() -> None:
|
||||
"""Safely reset telemetry, distinguishing import errors from reset failures."""
|
||||
try:
|
||||
from core.telemetry import reset_telemetry
|
||||
except ImportError:
|
||||
# Telemetry module not available - this is normal if telemetry not used
|
||||
return
|
||||
try:
|
||||
reset_telemetry()
|
||||
except Exception as exc:
|
||||
logger.debug("Telemetry reset failed (may indicate cleanup needed)", exc_info=exc)
|
||||
|
||||
|
||||
@pytest.fixture(scope="module", autouse=True)
|
||||
def cleanup_telemetry():
|
||||
"""Clean up telemetry singleton after each test module to prevent state pollution."""
|
||||
yield
|
||||
_safe_reset_telemetry()
|
||||
|
||||
|
||||
@pytest.fixture(scope="class")
|
||||
def fresh_telemetry():
|
||||
"""Reset telemetry before test class runs (for tests that need clean state)."""
|
||||
_safe_reset_telemetry()
|
||||
yield
|
||||
|
||||
|
||||
def pytest_collection_modifyitems(session, config, items): # noqa: ARG001
|
||||
"""Reorder tests so characterization tests run before integration tests.
|
||||
|
||||
This prevents integration tests from initializing the telemetry singleton
|
||||
before characterization tests can mock it.
|
||||
"""
|
||||
# Separate integration tests from other tests
|
||||
integration_tests = []
|
||||
other_tests = []
|
||||
|
||||
for item in items:
|
||||
# Check if test is in integration/ directory
|
||||
if "integration" in str(item.path):
|
||||
integration_tests.append(item)
|
||||
else:
|
||||
other_tests.append(item)
|
||||
|
||||
# Reorder: characterization/unit tests first, then integration tests
|
||||
items[:] = other_tests + integration_tests
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def restore_global_config():
|
||||
"""Restore global config/env mutations between tests."""
|
||||
from core.config import config as global_config
|
||||
|
||||
prior_env = os.environ.get("UNITY_MCP_TRANSPORT")
|
||||
prior = {
|
||||
"transport_mode": global_config.transport_mode,
|
||||
"http_remote_hosted": global_config.http_remote_hosted,
|
||||
"api_key_validation_url": global_config.api_key_validation_url,
|
||||
"api_key_login_url": global_config.api_key_login_url,
|
||||
"api_key_cache_ttl": global_config.api_key_cache_ttl,
|
||||
"api_key_service_token_header": global_config.api_key_service_token_header,
|
||||
"api_key_service_token": global_config.api_key_service_token,
|
||||
}
|
||||
yield
|
||||
|
||||
if prior_env is None:
|
||||
os.environ.pop("UNITY_MCP_TRANSPORT", None)
|
||||
else:
|
||||
os.environ["UNITY_MCP_TRANSPORT"] = prior_env
|
||||
|
||||
for key, value in prior.items():
|
||||
setattr(global_config, key, value)
|
||||
Reference in New Issue
Block a user