Skip to main content
Glama
test_gemini_client.py•6.07 kB
"""Tests for Google Gemini client.""" from unittest.mock import MagicMock, patch import pytest from context_manager.gemini_client import GeminiClient from models import ContextEntry class TestGeminiClient: """Test Gemini client.""" @patch("context_manager.gemini_client.genai.configure") @patch("context_manager.gemini_client.genai.GenerativeModel") def test_init(self, mock_model: MagicMock, mock_configure: MagicMock, monkeypatch: pytest.MonkeyPatch) -> None: """Test Gemini client initialization.""" monkeypatch.setenv("GOOGLE_API_KEY", "test-key") client = GeminiClient() assert client is not None assert client.model_name == "gemini-2.0-flash-thinking-exp-01-21" mock_configure.assert_called_once_with(api_key="test-key") mock_model.assert_called_once() def test_init_no_api_key(self, monkeypatch: pytest.MonkeyPatch) -> None: """Test initialization fails without API key.""" monkeypatch.delenv("GOOGLE_API_KEY", raising=False) with pytest.raises(ValueError, match="Google API key"): GeminiClient() @patch("context_manager.gemini_client.genai.configure") @patch("context_manager.gemini_client.genai.GenerativeModel") def test_get_second_opinion( self, mock_model: MagicMock, mock_configure: MagicMock, sample_context: ContextEntry, monkeypatch: pytest.MonkeyPatch ) -> None: """Test getting a second opinion.""" monkeypatch.setenv("GOOGLE_API_KEY", "test-key") # Mock Gemini response mock_instance = MagicMock() mock_response = MagicMock() mock_response.text = "This is a solid implementation" mock_instance.generate_content.return_value = mock_response mock_model.return_value = mock_instance client = GeminiClient() response = client.get_second_opinion(sample_context) assert response == "This is a solid implementation" assert mock_instance.generate_content.called @patch("context_manager.gemini_client.genai.configure") @patch("context_manager.gemini_client.genai.GenerativeModel") def test_get_second_opinion_with_question( self, mock_model: MagicMock, mock_configure: MagicMock, sample_context: ContextEntry, monkeypatch: pytest.MonkeyPatch ) -> None: """Test getting a second opinion with a custom question.""" monkeypatch.setenv("GOOGLE_API_KEY", "test-key") # Mock Gemini response mock_instance = MagicMock() mock_response = MagicMock() mock_response.text = "Yes, this approach is correct" mock_instance.generate_content.return_value = mock_response mock_model.return_value = mock_instance client = GeminiClient() response = client.get_second_opinion(sample_context, "Is this correct?") assert response == "Yes, this approach is correct" @patch("context_manager.gemini_client.genai.configure") @patch("context_manager.gemini_client.genai.GenerativeModel") def test_format_context_for_gemini( self, mock_model: MagicMock, mock_configure: MagicMock, sample_context: ContextEntry, monkeypatch: pytest.MonkeyPatch ) -> None: """Test formatting context for Gemini.""" monkeypatch.setenv("GOOGLE_API_KEY", "test-key") client = GeminiClient() formatted = client._format_context_for_gemini(sample_context) assert "Test Context" in formatted assert sample_context.type in formatted assert "test.py" in formatted or "hello" in formatted @patch("context_manager.gemini_client.genai.configure") @patch("context_manager.gemini_client.genai.GenerativeModel") def test_format_context_with_messages(self, mock_model: MagicMock, mock_configure: MagicMock, monkeypatch: pytest.MonkeyPatch) -> None: """Test formatting context with messages.""" from models import ContextContent, ContextEntry monkeypatch.setenv("GOOGLE_API_KEY", "test-key") context = ContextEntry( type="conversation", title="Test", content=ContextContent(messages=["Message 1", "Message 2"]), tags=[], project_path="/test", ) client = GeminiClient() formatted = client._format_context_for_gemini(context) assert "Message 1" in formatted assert "Message 2" in formatted @patch("context_manager.gemini_client.genai.configure") @patch("context_manager.gemini_client.genai.GenerativeModel") def test_format_context_with_suggestions( self, mock_model: MagicMock, mock_configure: MagicMock, monkeypatch: pytest.MonkeyPatch ) -> None: """Test formatting context with suggestions.""" from models import ContextContent, ContextEntry monkeypatch.setenv("GOOGLE_API_KEY", "test-key") context = ContextEntry( type="suggestion", title="Test", content=ContextContent(suggestions="Use dependency injection"), tags=[], project_path="/test", ) client = GeminiClient() formatted = client._format_context_for_gemini(context) assert "Use dependency injection" in formatted @patch("context_manager.gemini_client.genai.configure") @patch("context_manager.gemini_client.genai.GenerativeModel") def test_format_context_with_errors(self, mock_model: MagicMock, mock_configure: MagicMock, monkeypatch: pytest.MonkeyPatch) -> None: """Test formatting context with errors.""" from models import ContextContent, ContextEntry monkeypatch.setenv("GOOGLE_API_KEY", "test-key") context = ContextEntry( type="error", title="Test", content=ContextContent(errors="ValueError: invalid literal"), tags=[], project_path="/test", ) client = GeminiClient() formatted = client._format_context_for_gemini(context) assert "ValueError: invalid literal" in formatted

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/taylorleese/mcp-toolz'

If you have feedback or need assistance with the MCP directory API, please join our Discord server