#!/usr/bin/env python3 # -*- coding: utf-8 -*- """Gemini fallback kill-switch contract.""" from services.ai_provider import AIProviderService, AIResponse from services.gemini_service import GeminiService def test_gemini_guard_defaults_disabled(monkeypatch): from services.gemini_guard import get_gemini_api_key, is_gemini_fallback_enabled monkeypatch.delenv("GEMINI_FALLBACK_ENABLED", raising=False) monkeypatch.setenv("GEMINI_API_KEY", "test-key") assert is_gemini_fallback_enabled("test") is False assert get_gemini_api_key("test") == "" def test_ai_provider_does_not_call_gemini_when_guard_disabled(monkeypatch): monkeypatch.delenv("GEMINI_FALLBACK_ENABLED", raising=False) service = AIProviderService(default_provider="ollama") failed_ollama = AIResponse( success=False, content="", model="qwen2.5-coder:7b", provider="ollama", error="ollama down", ) def forbidden_fallback(): raise AssertionError("Gemini fallback must be blocked by default") result = service._gemini_fallback(failed_ollama, forbidden_fallback) assert result.success is False assert result.provider == "ollama" assert "GEMINI_FALLBACK_ENABLED=false" in (result.error or "") def test_gemini_service_check_connection_is_blocked_by_default(monkeypatch): monkeypatch.delenv("GEMINI_FALLBACK_ENABLED", raising=False) monkeypatch.setenv("GEMINI_API_KEY", "test-key") service = GeminiService() def forbidden_init(): raise AssertionError("SDK initialization must not run when fallback is disabled") monkeypatch.setattr(service, "_ensure_initialized", forbidden_init) result = service.generate("hello") assert result.success is False assert "GEMINI_FALLBACK_ENABLED=false" in (result.error or "") def test_mcp_collector_does_not_initialize_gemini_when_guard_disabled(monkeypatch): import services.mcp_collector_service as mcp_mod monkeypatch.delenv("GEMINI_FALLBACK_ENABLED", raising=False) monkeypatch.setattr(mcp_mod, "GEMINI_API_KEY", "test-key") service = mcp_mod.MCPCollectorService() assert service._ensure_init() is False assert service._genai is None def test_openclaw_direct_gemini_call_is_blocked_by_default(monkeypatch): import services.openclaw_strategist_service as svc monkeypatch.delenv("GEMINI_FALLBACK_ENABLED", raising=False) monkeypatch.setattr(svc, "GEMINI_API_KEY", "test-key") assert svc._call_gemini("system", "user", caller="openclaw_qa_gemini_fallback") is None