补充图片编辑选项 multipart 测试

覆盖质量、背景、输出格式与 mask 文件字段

断言文件名、MIME 类型和字节内容均正确发送
This commit is contained in:
2026-09-08 12:21:11 +08:00
parent d1f9f4e1ef
commit 4dcf38715b
@@ -429,6 +429,53 @@ mod tests {
server.abort();
}
#[tokio::test]
async fn vector_engine_curl_transport_posts_raw_edit_options_and_mask() {
let (base_url, server, request_rx) = start_single_response_server().await;
let response = send_vector_engine_multipart_edit_request_with_curl_options(
format!("{base_url}/v1/images/edits").as_str(),
"test-key",
GPT_IMAGE_2_MODEL,
"测试提示词",
None,
"1536x1024",
1,
&[ReferenceImage {
bytes: b"reference".to_vec(),
mime_type: "image/webp".to_string(),
file_name: "reference.webp".to_string(),
}],
Some(&RawImageEditOptions {
quality: Some("high".to_string()),
background: Some("transparent".to_string()),
output_format: Some("png".to_string()),
width: 1536,
height: 1024,
mask: Some(ReferenceImage {
bytes: b"mask-bytes".to_vec(),
mime_type: "image/png".to_string(),
file_name: "mask.png".to_string(),
}),
}),
1_000,
)
.await
.expect("curl multipart raw edit request should succeed");
assert_eq!(response.status, 200);
let request = request_rx
.await
.expect("mock server should capture request");
let request_text = String::from_utf8_lossy(request.as_slice());
assert!(request_text.contains("name=\"quality\"\r\n\r\nhigh"));
assert!(request_text.contains("name=\"background\"\r\n\r\ntransparent"));
assert!(request_text.contains("name=\"output_format\"\r\n\r\npng"));
assert!(request_text.contains("name=\"mask\"; filename=\"mask.png\""));
assert!(request_text.contains("Content-Type: image/png"));
assert!(request_text.contains("mask-bytes"));
server.abort();
}
async fn start_single_response_server() -> (
String,
tokio::task::JoinHandle<()>,