"""Pytest configuration and fixtures.""" from collections.abc import Generator from pathlib import Path import pytest from aegis_gitea_mcp.audit import reset_audit_logger from aegis_gitea_mcp.auth import reset_validator from aegis_gitea_mcp.config import reset_settings from aegis_gitea_mcp.oauth import reset_oauth_validator from aegis_gitea_mcp.observability import reset_metrics_registry from aegis_gitea_mcp.policy import reset_policy_engine from aegis_gitea_mcp.rate_limit import reset_rate_limiter @pytest.fixture(autouse=True) def reset_globals(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> Generator[None, None, None]: """Reset global singletons between tests and set up temp audit log.""" # Reset singletons before each test to ensure clean state reset_settings() reset_audit_logger() reset_validator() reset_oauth_validator() reset_policy_engine() reset_rate_limiter() reset_metrics_registry() # Use temporary directory for audit logs in tests audit_log_path = tmp_path / "audit.log" monkeypatch.setenv("AUDIT_LOG_PATH", str(audit_log_path)) yield # Also reset after test for cleanup reset_settings() reset_audit_logger() reset_validator() reset_oauth_validator() reset_policy_engine() reset_rate_limiter() reset_metrics_registry() @pytest.fixture def mock_env(monkeypatch: pytest.MonkeyPatch) -> None: """Set up mock environment variables for testing (standard API key mode).""" monkeypatch.setenv("GITEA_URL", "https://gitea.example.com") monkeypatch.setenv("GITEA_TOKEN", "test-token-12345") monkeypatch.setenv("ENVIRONMENT", "test") monkeypatch.setenv("MCP_HOST", "127.0.0.1") monkeypatch.setenv("MCP_PORT", "8080") monkeypatch.setenv("LOG_LEVEL", "DEBUG") monkeypatch.setenv("MCP_API_KEYS", "a" * 64) monkeypatch.setenv("STARTUP_VALIDATE_GITEA", "false") @pytest.fixture def mock_env_oauth(monkeypatch: pytest.MonkeyPatch) -> None: """Set up mock environment variables for OAuth mode testing.""" monkeypatch.setenv("GITEA_URL", "https://gitea.example.com") monkeypatch.setenv("ENVIRONMENT", "test") monkeypatch.setenv("MCP_HOST", "127.0.0.1") monkeypatch.setenv("MCP_PORT", "8080") monkeypatch.setenv("LOG_LEVEL", "DEBUG") monkeypatch.setenv("OAUTH_MODE", "true") monkeypatch.setenv("GITEA_OAUTH_CLIENT_ID", "test-client-id") monkeypatch.setenv("GITEA_OAUTH_CLIENT_SECRET", "test-client-secret") monkeypatch.setenv("STARTUP_VALIDATE_GITEA", "false")