From 1c9f26d6c89b71f77be1113c4a63cd3422ebfc99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torbj=C3=B8rn=20Lindahl?= Date: Wed, 1 Apr 2026 23:59:38 +0200 Subject: [PATCH] test(zen): align provider tests with API --- tests/test_zen_provider.py | 80 +++++++++++++++++--------------------- 1 file changed, 35 insertions(+), 45 deletions(-) diff --git a/tests/test_zen_provider.py b/tests/test_zen_provider.py index b1456e5..be28368 100644 --- a/tests/test_zen_provider.py +++ b/tests/test_zen_provider.py @@ -288,57 +288,52 @@ class TestZenAPIMocking: mock_response.usage.prompt_tokens = 10 mock_response.usage.completion_tokens = 20 - with patch.object(provider.client.chat.completions, "create", return_value=mock_response): - # Test the completion method - this will initialize the client - response = provider.complete( - model="claude-sonnet-4-5", messages=[{"role": "user", "content": "Hello"}], temperature=0.7 + with patch.object(provider.client.chat.completions, "create", return_value=mock_response) as create_mock: + response = provider.generate_content( + prompt="Hello", + model_name="claude-sonnet-4-5", + temperature=0.7, ) assert response.content == "Mocked response from Zen" + call_kwargs = create_mock.call_args.kwargs + assert call_kwargs["model"] == "claude-sonnet-4-5" + assert call_kwargs["messages"] == [{"role": "user", "content": "Hello"}] + assert call_kwargs["temperature"] == 0.7 + assert call_kwargs["stream"] is False - def test_streaming_completion_mock(self): - """Test streaming completion with mocked API.""" + def test_generate_content_resolves_aliases(self): + """Test generate_content resolves Zen aliases before calling the API.""" provider = ZenProvider(api_key="test-key") - # Mock streaming response - mock_chunk1 = Mock() - mock_chunk1.choices = [Mock()] - mock_chunk1.choices[0].delta.content = "Hello" - mock_chunk1.choices[0].finish_reason = None + mock_response = Mock() + mock_response.output_text = "Alias response" + mock_response.model = "gpt-5.1-codex" + mock_response.id = "resp_123" + mock_response.created_at = 1234567890 + mock_response.usage = Mock() + mock_response.usage.prompt_tokens = 11 + mock_response.usage.completion_tokens = 7 + mock_response.usage.total_tokens = 18 - mock_chunk2 = Mock() - mock_chunk2.choices = [Mock()] - mock_chunk2.choices[0].delta.content = " world!" - mock_chunk2.choices[0].finish_reason = "stop" - - mock_stream = [mock_chunk1, mock_chunk2] - - # Access client to initialize it first - _ = provider.client - with patch.object(provider.client.chat.completions, "create", return_value=mock_stream): - # Test streaming completion - stream = provider.complete_stream( - model="gpt-5.1-codex", - messages=[{"role": "user", "content": "Say hello"}], + with patch.object(provider.client.responses, "create", return_value=mock_response) as create_mock: + response = provider.generate_content( + prompt="Say hello", + model_name="zen-codex", ) - chunks = list(stream) - assert len(chunks) == 2 - assert chunks[0].content == "Hello" - assert chunks[1].content == " world!" + assert response.content == "Alias response" + call_kwargs = create_mock.call_args.kwargs + assert call_kwargs["model"] == "gpt-5.1-codex" + assert call_kwargs["input"] == [{"role": "user", "content": [{"type": "input_text", "text": "Say hello"}]}] def test_api_error_handling(self): """Test error handling for API failures.""" provider = ZenProvider(api_key="test-key") - # Mock API error - from openai import APIError - - api_error = APIError("Mock API error", request=Mock(), body="error details") - - with patch.object(provider._client.chat.completions, "create", side_effect=api_error): - with pytest.raises(APIError): - provider.complete(model="claude-sonnet-4-5", messages=[{"role": "user", "content": "Test"}]) + with patch.object(provider.client.chat.completions, "create", side_effect=RuntimeError("Mock API error")): + with pytest.raises(RuntimeError, match="OpenCode Zen API error for model claude-sonnet-4-5"): + provider.generate_content(prompt="Test", model_name="claude-sonnet-4-5") def test_invalid_model_error(self): """Test error handling for invalid models.""" @@ -351,11 +346,6 @@ class TestZenAPIMocking: """Test handling of authentication errors.""" provider = ZenProvider(api_key="invalid-key") - # Mock authentication error - from openai import AuthenticationError - - auth_error = AuthenticationError("Invalid API key", request=Mock(), body="auth failed") - - with patch.object(provider._client.chat.completions, "create", side_effect=auth_error): - with pytest.raises(AuthenticationError): - provider.complete(model="claude-sonnet-4-5", messages=[{"role": "user", "content": "Test"}]) + with patch.object(provider.client.chat.completions, "create", side_effect=RuntimeError("auth failed")): + with pytest.raises(RuntimeError, match="OpenCode Zen API error for model claude-sonnet-4-5"): + provider.generate_content(prompt="Test", model_name="claude-sonnet-4-5")