76 lines
2.4 KiB
Python
76 lines
2.4 KiB
Python
"""
|
|
Pytest configuration for Zen MCP Server tests
|
|
"""
|
|
|
|
import asyncio
|
|
import os
|
|
import sys
|
|
import tempfile
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
# Ensure the parent directory is in the Python path for imports
|
|
parent_dir = Path(__file__).resolve().parent.parent
|
|
if str(parent_dir) not in sys.path:
|
|
sys.path.insert(0, str(parent_dir))
|
|
|
|
# Set dummy API keys for tests if not already set
|
|
if "GEMINI_API_KEY" not in os.environ:
|
|
os.environ["GEMINI_API_KEY"] = "dummy-key-for-tests"
|
|
if "OPENAI_API_KEY" not in os.environ:
|
|
os.environ["OPENAI_API_KEY"] = "dummy-key-for-tests"
|
|
|
|
# Set default model to a specific value for tests to avoid auto mode
|
|
# This prevents all tests from failing due to missing model parameter
|
|
os.environ["DEFAULT_MODEL"] = "gemini-2.0-flash"
|
|
|
|
# Force reload of config module to pick up the env var
|
|
import importlib
|
|
|
|
import config
|
|
|
|
importlib.reload(config)
|
|
|
|
# Set MCP_PROJECT_ROOT to a temporary directory for tests
|
|
# This provides a safe sandbox for file operations during testing
|
|
# Create a temporary directory that will be used as the project root for all tests
|
|
test_root = tempfile.mkdtemp(prefix="zen_mcp_test_")
|
|
os.environ["MCP_PROJECT_ROOT"] = test_root
|
|
|
|
# Configure asyncio for Windows compatibility
|
|
if sys.platform == "win32":
|
|
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
|
|
|
|
# Register providers for all tests
|
|
from providers import ModelProviderRegistry
|
|
from providers.base import ProviderType
|
|
from providers.gemini import GeminiModelProvider
|
|
from providers.openai import OpenAIModelProvider
|
|
|
|
# Register providers at test startup
|
|
ModelProviderRegistry.register_provider(ProviderType.GOOGLE, GeminiModelProvider)
|
|
ModelProviderRegistry.register_provider(ProviderType.OPENAI, OpenAIModelProvider)
|
|
|
|
|
|
@pytest.fixture
|
|
def project_path(tmp_path):
|
|
"""
|
|
Provides a temporary directory within the PROJECT_ROOT sandbox for tests.
|
|
This ensures all file operations during tests are within the allowed directory.
|
|
"""
|
|
# Get the test project root
|
|
test_root = Path(os.environ.get("MCP_PROJECT_ROOT", "/tmp"))
|
|
|
|
# Create a subdirectory for this specific test
|
|
test_dir = test_root / f"test_{tmp_path.name}"
|
|
test_dir.mkdir(parents=True, exist_ok=True)
|
|
|
|
return test_dir
|
|
|
|
|
|
# Pytest configuration
|
|
def pytest_configure(config):
|
|
"""Configure pytest with custom markers"""
|
|
config.addinivalue_line("markers", "asyncio: mark test as async")
|