From a25d80ae28708e6832d14337e845f31be7eef82a Mon Sep 17 00:00:00 2001 From: spllzh <28668817@qq.com> Date: Sun, 7 Sep 2025 23:59:17 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E7=94=A8dify=EF=BC=8C=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E6=97=B6=E9=97=B4=E9=97=AE=E9=A2=98=EF=BC=8C=E6=BA=90?= =?UTF-8?q?=E8=AF=AD=E6=96=99=E4=B8=BA=E7=A9=BA=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DifyWorkflowControllerTest.java | 113 ++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 src/test/java/com/rj/controller/DifyWorkflowControllerTest.java diff --git a/src/test/java/com/rj/controller/DifyWorkflowControllerTest.java b/src/test/java/com/rj/controller/DifyWorkflowControllerTest.java new file mode 100644 index 0000000..6e19708 --- /dev/null +++ b/src/test/java/com/rj/controller/DifyWorkflowControllerTest.java @@ -0,0 +1,113 @@ +package com.rj.controller; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.rj.dto.DifyWorkflowRequestDto; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureWebMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +/** + * Dify工作流控制器测试类 + * + * @author 李中华 + * @date 2025/1/3 + */ +@SpringBootTest +@AutoConfigureWebMvc +@ActiveProfiles("test") +public class DifyWorkflowControllerTest { + + @Autowired + private WebApplicationContext webApplicationContext; + + private MockMvc mockMvc; + + @Autowired + private ObjectMapper objectMapper; + + public void setup() { + mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); + } + + @Test + public void testGetWorkflowConfig() throws Exception { + setup(); + + mockMvc.perform(get("/api/dify/workflow/config") + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.message").value("工作流配置信息")) + .andExpect(jsonPath("$.workflowName").value("企微对话分析工作流")); + } + + @Test + public void testTestWithPresetData() throws Exception { + setup(); + + mockMvc.perform(post("/api/dify/workflow/consulting-scenario/test") + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.success").exists()); + } + + @Test + public void testConsultingScenarioWorkflowWithParameters() throws Exception { + setup(); + + // 读取真实的聊天内容 + ClassLoader classLoader = getClass().getClassLoader(); + java.io.InputStream inputStream = classLoader.getResourceAsStream("corpus/qiwei/qw1.txt"); + java.util.Scanner scanner = new java.util.Scanner(inputStream, "UTF-8").useDelimiter("\\A"); + String chatContent = scanner.hasNext() ? scanner.next() : ""; + scanner.close(); + + // 生成随机值 + String unionId = "test_union_" + java.util.UUID.randomUUID().toString().replace("-", "").substring(0, 8); + String consultantId = "consultant_" + java.util.UUID.randomUUID().toString().replace("-", "").substring(0, 8); + String communicateDate = generateRandomDateTime(); + String analysisScene = "sales_consultation"; + String aiAnalysisRequestId = "ai_req_" + java.util.UUID.randomUUID().toString().replace("-", "").substring(0, 12); + int version = new java.util.Random().nextInt(10) + 1; // 1-10之间的随机版本号 + + // 创建测试请求DTO + DifyWorkflowRequestDto requestDto = new DifyWorkflowRequestDto(); + requestDto.setUnionId(unionId); + requestDto.setConsultantId(consultantId); + requestDto.setCommunicateDate(communicateDate); + requestDto.setAnalysisScene(analysisScene); + requestDto.setAiAnalysisRequestId(aiAnalysisRequestId); + requestDto.setVersion(version); + requestDto.setChat(chatContent); + + mockMvc.perform(post("/api/dify/workflow/consulting-scenario") + .contentType(MediaType.APPLICATION_JSON) + .content(objectMapper.writeValueAsString(requestDto))) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.success").exists()); + } + + /** + * 生成随机日期时间字符串 + * @return 随机日期时间字符串,格式为 "yyyy-MM-dd HH:mm:ss" + */ + private String generateRandomDateTime() { + java.util.Random random = new java.util.Random(); + int year = 2020 + random.nextInt(6); // 2020-2025年 + int month = 1 + random.nextInt(12); // 1-12月 + int day = 1 + random.nextInt(28); // 1-28日(避免月份天数问题) + int hour = random.nextInt(24); // 0-23小时 + int minute = random.nextInt(60); // 0-59分钟 + int second = random.nextInt(60); // 0-59秒 + + return String.format("%04d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, minute, second); + } +}