(self)
| 84 | |
| 85 | class TestLLMAPI(unittest.TestCase): |
| 86 | def setUp(self): |
| 87 | # Create mock clients for different providers |
| 88 | self.mock_openai_client = MagicMock() |
| 89 | self.mock_anthropic_client = MagicMock() |
| 90 | self.mock_gemini_client = MagicMock() |
| 91 | |
| 92 | # Set up OpenAI-style response |
| 93 | self.mock_openai_response = MagicMock() |
| 94 | self.mock_openai_choice = MagicMock() |
| 95 | self.mock_openai_message = MagicMock() |
| 96 | self.mock_openai_message.content = "Test OpenAI response" |
| 97 | self.mock_openai_choice.message = self.mock_openai_message |
| 98 | self.mock_openai_response.choices = [self.mock_openai_choice] |
| 99 | self.mock_openai_client.chat.completions.create.return_value = self.mock_openai_response |
| 100 | |
| 101 | # Set up Anthropic-style response |
| 102 | self.mock_anthropic_response = MagicMock() |
| 103 | self.mock_anthropic_content = MagicMock() |
| 104 | self.mock_anthropic_content.text = "Test Anthropic response" |
| 105 | self.mock_anthropic_response.content = [self.mock_anthropic_content] |
| 106 | self.mock_anthropic_client.messages.create.return_value = self.mock_anthropic_response |
| 107 | |
| 108 | # Set up Gemini-style response - Updated for Chat Session |
| 109 | self.mock_gemini_chat_session = MagicMock() # Mock for the chat session |
| 110 | self.mock_gemini_response = MagicMock() |
| 111 | self.mock_gemini_response.text = "Test Gemini response" |
| 112 | self.mock_gemini_chat_session.send_message.return_value = self.mock_gemini_response # Mock send_message |
| 113 | |
| 114 | self.mock_gemini_model = MagicMock() # Mock for the GenerativeModel |
| 115 | self.mock_gemini_model.start_chat.return_value = self.mock_gemini_chat_session # Mock start_chat |
| 116 | |
| 117 | self.mock_gemini_client = MagicMock() # Mock for the genai module itself |
| 118 | self.mock_gemini_client.GenerativeModel.return_value = self.mock_gemini_model |
| 119 | |
| 120 | # Set up SiliconFlow-style response |
| 121 | self.mock_siliconflow_response = MagicMock() |
| 122 | self.mock_siliconflow_choice = MagicMock() |
| 123 | self.mock_siliconflow_message = MagicMock() |
| 124 | self.mock_siliconflow_message.content = "Test Siliconflow response" |
| 125 | self.mock_siliconflow_choice.message = self.mock_siliconflow_message |
| 126 | self.mock_siliconflow_response.choices = [self.mock_siliconflow_choice] |
| 127 | |
| 128 | # Mock environment variables |
| 129 | self.env_patcher = patch.dict('os.environ', { |
| 130 | 'OPENAI_API_KEY': 'test-openai-key', |
| 131 | 'DEEPSEEK_API_KEY': 'test-deepseek-key', |
| 132 | 'ANTHROPIC_API_KEY': 'test-anthropic-key', |
| 133 | 'GOOGLE_API_KEY': 'test-google-key', |
| 134 | 'AZURE_OPENAI_API_KEY': 'test-azure-key', |
| 135 | 'AZURE_OPENAI_MODEL_DEPLOYMENT': 'test-model-deployment', |
| 136 | 'SILICONFLOW_API_KEY': 'test-siliconflow-key' |
| 137 | }) |
| 138 | self.env_patcher.start() |
| 139 | |
| 140 | # Set up Azure OpenAI mock |
| 141 | self.mock_azure_response = MagicMock() |
| 142 | self.mock_azure_choice = MagicMock() |
| 143 | self.mock_azure_message = MagicMock() |
nothing calls this directly
no outgoing calls
no test coverage detected