77
88
99async def test_text_to_image_generation_success (mcp_server , mocker ):
10- """Test successful text-to-image generation."""
11- mock_response_data = {"images" : [{"url" : "https://example.com/generated_image.jpg" }]}
12- mock_post = mocker .patch ("modelscope_mcp_server.client.default_client.post" , return_value = mock_response_data )
10+ """Test successful text-to-image generation with async polling."""
11+ mock_post = mocker .patch (
12+ "modelscope_mcp_server.client.default_client.post" ,
13+ return_value = {"task_id" : "task-text-1" },
14+ )
15+ mock_get = mocker .patch (
16+ "modelscope_mcp_server.client.default_client.get" ,
17+ return_value = {
18+ "task_status" : "SUCCEED" ,
19+ "output_images" : ["https://example.com/generated_image.jpg" ],
20+ },
21+ )
1322
1423 async with Client (mcp_server ) as client :
1524 result = await client .call_tool (
@@ -32,12 +41,22 @@ async def test_text_to_image_generation_success(mcp_server, mocker):
3241 )
3342
3443 mock_post .assert_called_once ()
44+ mock_get .assert_called ()
3545
3646
3747async def test_image_to_image_generation_success (mcp_server , mocker ):
38- """Test successful image-to-image generation."""
39- mock_response_data = {"images" : [{"url" : "https://example.com/modified_image.jpg" }]}
40- mock_post = mocker .patch ("modelscope_mcp_server.client.default_client.post" , return_value = mock_response_data )
48+ """Test successful image-to-image generation with async polling."""
49+ mock_post = mocker .patch (
50+ "modelscope_mcp_server.client.default_client.post" ,
51+ return_value = {"task_id" : "task-image-1" },
52+ )
53+ mock_get = mocker .patch (
54+ "modelscope_mcp_server.client.default_client.get" ,
55+ return_value = {
56+ "task_status" : "SUCCEED" ,
57+ "output_images" : ["https://example.com/modified_image.jpg" ],
58+ },
59+ )
4160
4261 async with Client (mcp_server ) as client :
4362 result = await client .call_tool (
@@ -61,12 +80,22 @@ async def test_image_to_image_generation_success(mcp_server, mocker):
6180 )
6281
6382 mock_post .assert_called_once ()
83+ mock_get .assert_called ()
6484
6585
6686async def test_generate_image_with_default_model (mcp_server , mocker ):
67- """Test image generation with default model when no model is specified."""
68- mock_response_data = {"images" : [{"url" : "https://example.com/default_model_image.jpg" }]}
69- mocker .patch ("modelscope_mcp_server.client.default_client.post" , return_value = mock_response_data )
87+ """Test image generation with default model when no model is specified (async)."""
88+ mocker .patch (
89+ "modelscope_mcp_server.client.default_client.post" ,
90+ return_value = {"task_id" : "task-default-1" },
91+ )
92+ mocker .patch (
93+ "modelscope_mcp_server.client.default_client.get" ,
94+ return_value = {
95+ "task_status" : "SUCCEED" ,
96+ "output_images" : ["https://example.com/default_model_image.jpg" ],
97+ },
98+ )
7099
71100 async with Client (mcp_server ) as client :
72101 result = await client .call_tool (
@@ -141,10 +170,10 @@ async def test_generate_image_timeout_error(mcp_server, mocker):
141170
142171
143172async def test_generate_image_malformed_response (mcp_server , mocker ):
144- """Test handling of malformed API response."""
173+ """Test handling of malformed API response on submit (missing task_id) ."""
145174 malformed_response_data = {
146175 "result" : "success" ,
147- # Missing 'images ' field
176+ # Missing 'task_id ' field
148177 }
149178 mocker .patch ("modelscope_mcp_server.client.default_client.post" , return_value = malformed_response_data )
150179
@@ -159,13 +188,22 @@ async def test_generate_image_malformed_response(mcp_server, mocker):
159188 )
160189
161190 print (f"✅ Malformed response error handled correctly: { exc_info .value } " )
162- assert "No images found in response" in str (exc_info .value )
191+ assert "No task_id found in response" in str (exc_info .value )
163192
164193
165194async def test_generate_image_request_parameters (mcp_server , mocker ):
166- """Test that the correct parameters are sent in the request."""
167- mock_response_data = {"images" : [{"url" : "https://example.com/test_image.jpg" }]}
168- mock_post = mocker .patch ("modelscope_mcp_server.client.default_client.post" , return_value = mock_response_data )
195+ """Test that the correct parameters are sent in the request (async)."""
196+ mock_post = mocker .patch (
197+ "modelscope_mcp_server.client.default_client.post" ,
198+ return_value = {"task_id" : "task-param-1" },
199+ )
200+ mock_get = mocker .patch (
201+ "modelscope_mcp_server.client.default_client.get" ,
202+ return_value = {
203+ "task_status" : "SUCCEED" ,
204+ "output_images" : ["https://example.com/test_image.jpg" ],
205+ },
206+ )
169207
170208 async with Client (mcp_server ) as client :
171209 await client .call_tool (
@@ -177,7 +215,7 @@ async def test_generate_image_request_parameters(mcp_server, mocker):
177215 },
178216 )
179217
180- # Verify the request was called with correct parameters
218+ # Verify the submit request was called with correct parameters
181219 mock_post .assert_called_once ()
182220 call_args = mock_post .call_args
183221
@@ -194,4 +232,11 @@ async def test_generate_image_request_parameters(mcp_server, mocker):
194232 # Check timeout
195233 assert call_args .kwargs ["timeout" ] == 300
196234
235+ # Check headers include async mode
236+ headers = call_args .kwargs .get ("headers" , {})
237+ assert headers .get ("X-ModelScope-Async-Mode" ) == "true"
238+
239+ # Verify polling was performed
240+ mock_get .assert_called ()
241+
197242 print ("✅ Request parameters verified correctly" )
0 commit comments