2
2
3
3
import pytest
4
4
5
+ from gpt_image_mcp .config .settings import ProvidersSettings , Settings
5
6
from gpt_image_mcp .providers .base import ProviderError
6
7
from gpt_image_mcp .tools .image_editing import ImageEditingTool
7
8
from gpt_image_mcp .tools .image_generation import ImageGenerationTool
@@ -28,9 +29,9 @@ def mock_editing_tool(storage_manager, cache_manager, mock_settings):
28
29
cache_manager = cache_manager ,
29
30
settings = mock_settings ,
30
31
)
31
- # Mock the OpenAI client with a mix of sync and async methods
32
+ # Mock the OpenAI client manager (which has edit_image method)
32
33
tool .openai_client = MagicMock ()
33
- tool .openai_client .edit_image = AsyncMock () # This method is async
34
+ tool .openai_client .edit_image = AsyncMock () # OpenAIClientManager method
34
35
tool .openai_client .estimate_cost = MagicMock (
35
36
return_value = {"estimated_cost_usd" : 0.01 }
36
37
) # This is sync
@@ -363,6 +364,42 @@ async def test_generate_image_storage_integration(
363
364
assert result ["image_id" ] == "stored_id"
364
365
storage_manager .save_image .assert_called_once ()
365
366
367
+ def test_missing_openai_provider_configuration (
368
+ self , storage_manager , cache_manager
369
+ ):
370
+ """Test that missing OpenAI provider configuration raises proper error."""
371
+ # Create settings with missing OpenAI provider
372
+ settings = Settings ()
373
+ settings .providers = ProvidersSettings () # Empty providers (no openai/gemini)
374
+
375
+ with pytest .raises (
376
+ ValueError , match = "OpenAI provider settings are missing in configuration"
377
+ ):
378
+ ImageGenerationTool (
379
+ storage_manager = storage_manager ,
380
+ cache_manager = cache_manager ,
381
+ settings = settings
382
+ )
383
+
384
+ def test_missing_gemini_provider_configuration (
385
+ self , storage_manager , cache_manager , mock_openai_settings
386
+ ):
387
+ """Test that missing Gemini provider configuration raises proper error."""
388
+ # Create settings with only OpenAI provider (missing Gemini)
389
+ settings = Settings ()
390
+ settings .providers = ProvidersSettings ()
391
+ settings .providers .openai = mock_openai_settings
392
+ # Note: settings.providers.gemini remains None
393
+
394
+ with pytest .raises (
395
+ ValueError , match = "Gemini provider settings are missing in configuration"
396
+ ):
397
+ ImageGenerationTool (
398
+ storage_manager = storage_manager ,
399
+ cache_manager = cache_manager ,
400
+ settings = settings
401
+ )
402
+
366
403
367
404
class TestImageEditingTool :
368
405
"""Unit tests for the ImageEditingTool."""
@@ -583,3 +620,20 @@ async def test_edit_image_storage_integration(
583
620
584
621
assert result ["image_id" ] == "edited_id"
585
622
storage_manager .save_image .assert_called_once ()
623
+
624
+ def test_missing_openai_provider_configuration (
625
+ self , storage_manager , cache_manager
626
+ ):
627
+ """Test that missing OpenAI provider configuration raises proper error."""
628
+ # Create settings with missing OpenAI provider
629
+ settings = Settings ()
630
+ settings .providers = ProvidersSettings () # Empty providers (no openai)
631
+
632
+ with pytest .raises (
633
+ ValueError , match = "OpenAI provider settings are missing in configuration"
634
+ ):
635
+ ImageEditingTool (
636
+ storage_manager = storage_manager ,
637
+ cache_manager = cache_manager ,
638
+ settings = settings
639
+ )
0 commit comments