diff --git a/src/test/java/com/gxwebsoft/ai/controller/AiCreativeFailureShapeContractTest.java b/src/test/java/com/gxwebsoft/ai/controller/AiCreativeFailureShapeContractTest.java new file mode 100644 index 0000000..fa94090 --- /dev/null +++ b/src/test/java/com/gxwebsoft/ai/controller/AiCreativeFailureShapeContractTest.java @@ -0,0 +1,41 @@ +package com.gxwebsoft.ai.controller; + +import com.gxwebsoft.common.core.utils.JSONUtil; +import org.junit.jupiter.api.Test; + +import java.lang.reflect.Method; +import java.util.Map; + +/** + * 端到端形状契约:把后端失败态的**真实产出**打成一行 JSON, + * 供前端验证脚本当作输入,确认前端拿到它时渲染的是可读文案而非原始报文。 + * + *

输出被 `.scratch/ai-assistant/verify-frontend-e2e.js` 读取; + * 断言放在那个脚本里(前端侧),这里只负责产出真实形状。 + */ +class AiCreativeFailureShapeContractTest { + + @Test + void 打印失败态真实返回形状() throws Exception { + String failureEvent = "{" + + "\"event\":\"workflow_finished\"," + + "\"workflow_run_id\":\"b2e18332-68bd-49e6-90e2-bd9d16d428ff\"," + + "\"task_id\":\"0b1fdd88-cc6f-45b8-989d-be4f85bcff74\"," + + "\"data\":{\"status\":\"failed\",\"outputs\":{}," + + "\"error\":\"req_id: dc688258de PluginInvokeError: Model disabled.\"}" + + "}"; + + Map responseData = JSONUtil.parseObject(failureEvent, Map.class); + AiController controller = new AiController(); + Method method = AiController.class.getDeclaredMethod( + "buildCreativeAssistantResult", Map.class, String.class); + method.setAccessible(true); + @SuppressWarnings("unchecked") + Map result = (Map) method.invoke( + controller, responseData, failureEvent); + + // ApiResult 只包一层 {code,message,data},apiRequest 在前端会拆出 data, + // 所以这里打印的正是前端 formatCreativeResult 的入参。 + System.out.println("__E2E_SHAPE__" + JSONUtil.toJSONString(result)); + } +}