diff --git a/common-agent-mcp/src/test/java/com/bruce/mcp/controller/McpImportControllerTests.java b/common-agent-mcp/src/test/java/com/bruce/mcp/controller/McpImportControllerTests.java new file mode 100644 index 0000000..b859741 --- /dev/null +++ b/common-agent-mcp/src/test/java/com/bruce/mcp/controller/McpImportControllerTests.java @@ -0,0 +1,71 @@ +package com.bruce.mcp.controller; + +import com.bruce.common.handler.GlobalExceptionHandler; +import com.bruce.mcp.service.IMcpCapabilityService; +import com.bruce.mcp.service.IMcpImportService; +import com.bruce.mcp.service.IMcpServerService; +import com.bruce.mcp.service.IMcpWorkspaceService; +import com.bruce.mcp.vo.McpWorkspaceVO; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +/** + * 验证 MCP 工作台查询接口的基础契约。 + */ +@ExtendWith(MockitoExtension.class) +class McpImportControllerTests { + + private MockMvc mockMvc; + + @Mock + private IMcpImportService mcpImportService; + + @Mock + private IMcpServerService mcpServerService; + + @Mock + private IMcpCapabilityService mcpCapabilityService; + + @Mock + private IMcpWorkspaceService mcpWorkspaceService; + + @InjectMocks + private McpImportController mcpImportController; + + @BeforeEach + void setUp() { + mockMvc = MockMvcBuilders.standaloneSetup(mcpImportController) + .setControllerAdvice(new GlobalExceptionHandler()) + .build(); + } + + @Test + void workspaceShouldReturnStructuredWorkspaceView() throws Exception { + McpWorkspaceVO workspace = new McpWorkspaceVO(); + workspace.setServerId(301L); + workspace.setServerCode("jira_server"); + workspace.setServerName("Jira 服务"); + workspace.setImportType("URL"); + workspace.setHealthStatus("HEALTHY"); + + when(mcpWorkspaceService.getWorkspace(301L)).thenReturn(workspace); + + mockMvc.perform(get("/api/mcp/workspace").param("serverId", "301")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.resultcode").value("0")) + .andExpect(jsonPath("$.data.serverId").value(301)) + .andExpect(jsonPath("$.data.serverCode").value("jira_server")) + .andExpect(jsonPath("$.data.healthStatus").value("HEALTHY")); + } +} diff --git a/common-agent-modelprovider/src/test/java/com/bruce/modelprovider/controller/ModelWorkspaceControllerTests.java b/common-agent-modelprovider/src/test/java/com/bruce/modelprovider/controller/ModelWorkspaceControllerTests.java new file mode 100644 index 0000000..3bf0c18 --- /dev/null +++ b/common-agent-modelprovider/src/test/java/com/bruce/modelprovider/controller/ModelWorkspaceControllerTests.java @@ -0,0 +1,58 @@ +package com.bruce.modelprovider.controller; + +import com.bruce.common.handler.GlobalExceptionHandler; +import com.bruce.modelprovider.service.IModelWorkspaceService; +import com.bruce.modelprovider.vo.ModelWorkspaceVO; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +/** + * 验证模型工作台聚合接口的基础返回契约。 + */ +@ExtendWith(MockitoExtension.class) +class ModelWorkspaceControllerTests { + + private MockMvc mockMvc; + + @Mock + private IModelWorkspaceService modelWorkspaceService; + + @InjectMocks + private ModelWorkspaceController modelWorkspaceController; + + @BeforeEach + void setUp() { + mockMvc = MockMvcBuilders.standaloneSetup(modelWorkspaceController) + .setControllerAdvice(new GlobalExceptionHandler()) + .build(); + } + + @Test + void getWorkspaceShouldReturnStructuredAggregateView() throws Exception { + ModelWorkspaceVO workspace = new ModelWorkspaceVO(); + workspace.setProviderCount(3); + workspace.setModelCount(5); + workspace.setRouteRuleCount(2); + workspace.setRecentFailedCallCount(1); + + when(modelWorkspaceService.getWorkspace()).thenReturn(workspace); + + mockMvc.perform(get("/api/model/workspace")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.resultcode").value("0")) + .andExpect(jsonPath("$.data.providerCount").value(3)) + .andExpect(jsonPath("$.data.modelCount").value(5)) + .andExpect(jsonPath("$.data.routeRuleCount").value(2)); + } +} diff --git a/common-agent-observability/src/test/java/com/bruce/observability/controller/ObservabilityTraceControllerTests.java b/common-agent-observability/src/test/java/com/bruce/observability/controller/ObservabilityTraceControllerTests.java new file mode 100644 index 0000000..6c8494f --- /dev/null +++ b/common-agent-observability/src/test/java/com/bruce/observability/controller/ObservabilityTraceControllerTests.java @@ -0,0 +1,68 @@ +package com.bruce.observability.controller; + +import com.bruce.common.handler.GlobalExceptionHandler; +import com.bruce.observability.service.IObservabilityExportService; +import com.bruce.observability.service.IObservabilityRunService; +import com.bruce.observability.service.IObservabilityTraceService; +import com.bruce.observability.vo.ObservabilityTraceVO; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import java.math.BigDecimal; + +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +/** + * 验证运行观测 Trace 接口的路径参数绑定和返回结构。 + */ +@ExtendWith(MockitoExtension.class) +class ObservabilityTraceControllerTests { + + private MockMvc mockMvc; + + @Mock + private IObservabilityRunService observabilityRunService; + + @Mock + private IObservabilityTraceService observabilityTraceService; + + @Mock + private IObservabilityExportService observabilityExportService; + + @InjectMocks + private ObservabilityTraceController observabilityTraceController; + + @BeforeEach + void setUp() { + mockMvc = MockMvcBuilders.standaloneSetup(observabilityTraceController) + .setControllerAdvice(new GlobalExceptionHandler()) + .build(); + } + + @Test + void traceShouldReturnStructuredTraceView() throws Exception { + ObservabilityTraceVO trace = new ObservabilityTraceVO(); + trace.setRequestId("req-1001"); + trace.setWorkflowStatus("SUCCESS"); + trace.setModelCallCount(2); + trace.setEstimatedCost(BigDecimal.valueOf(0.18)); + + when(observabilityTraceService.getTrace("req-1001")).thenReturn(trace); + + mockMvc.perform(get("/api/observability/runs/req-1001")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.resultcode").value("0")) + .andExpect(jsonPath("$.data.requestId").value("req-1001")) + .andExpect(jsonPath("$.data.workflowStatus").value("SUCCESS")) + .andExpect(jsonPath("$.data.modelCallCount").value(2)); + } +} diff --git a/common-agent-skill/src/test/java/com/bruce/skill/controller/SkillWorkspaceControllerTests.java b/common-agent-skill/src/test/java/com/bruce/skill/controller/SkillWorkspaceControllerTests.java new file mode 100644 index 0000000..9d98723 --- /dev/null +++ b/common-agent-skill/src/test/java/com/bruce/skill/controller/SkillWorkspaceControllerTests.java @@ -0,0 +1,62 @@ +package com.bruce.skill.controller; + +import com.bruce.common.handler.GlobalExceptionHandler; +import com.bruce.skill.service.ISkillVersionService; +import com.bruce.skill.service.ISkillWorkspaceService; +import com.bruce.skill.vo.SkillWorkspaceVO; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +/** + * 验证 Skill 工作台详情接口的基础返回结构。 + */ +@ExtendWith(MockitoExtension.class) +class SkillWorkspaceControllerTests { + + private MockMvc mockMvc; + + @Mock + private ISkillWorkspaceService skillWorkspaceService; + + @Mock + private ISkillVersionService skillVersionService; + + @InjectMocks + private SkillWorkspaceController skillWorkspaceController; + + @BeforeEach + void setUp() { + mockMvc = MockMvcBuilders.standaloneSetup(skillWorkspaceController) + .setControllerAdvice(new GlobalExceptionHandler()) + .build(); + } + + @Test + void detailShouldReturnStructuredWorkspaceView() throws Exception { + SkillWorkspaceVO workspace = new SkillWorkspaceVO(); + workspace.setSkillId(401L); + workspace.setSkillCode("resume_extract"); + workspace.setSkillName("简历抽取"); + workspace.setStatus("PUBLISHED"); + + when(skillWorkspaceService.getWorkspace("resume_extract")).thenReturn(workspace); + + mockMvc.perform(get("/api/skills/resume_extract")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.resultcode").value("0")) + .andExpect(jsonPath("$.data.skillId").value(401)) + .andExpect(jsonPath("$.data.skillCode").value("resume_extract")) + .andExpect(jsonPath("$.data.status").value("PUBLISHED")); + } +} diff --git a/common-agent-workflow/src/test/java/com/bruce/workflow/controller/WorkflowWorkspaceControllerTests.java b/common-agent-workflow/src/test/java/com/bruce/workflow/controller/WorkflowWorkspaceControllerTests.java new file mode 100644 index 0000000..73b28d1 --- /dev/null +++ b/common-agent-workflow/src/test/java/com/bruce/workflow/controller/WorkflowWorkspaceControllerTests.java @@ -0,0 +1,61 @@ +package com.bruce.workflow.controller; + +import com.bruce.common.handler.GlobalExceptionHandler; +import com.bruce.workflow.service.IWorkflowWorkspaceService; +import com.bruce.workflow.vo.WorkflowWorkspaceVO; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +/** + * 验证 Workflow 工作台接口的查询参数绑定和返回结构。 + */ +@ExtendWith(MockitoExtension.class) +class WorkflowWorkspaceControllerTests { + + private MockMvc mockMvc; + + @Mock + private IWorkflowWorkspaceService workflowWorkspaceService; + + @InjectMocks + private WorkflowWorkspaceController workflowWorkspaceController; + + @BeforeEach + void setUp() { + mockMvc = MockMvcBuilders.standaloneSetup(workflowWorkspaceController) + .setControllerAdvice(new GlobalExceptionHandler()) + .build(); + } + + @Test + void detailShouldReturnStructuredWorkspaceView() throws Exception { + WorkflowWorkspaceVO workspace = new WorkflowWorkspaceVO(); + workspace.setProjectId(101L); + workspace.setProjectCode("studio"); + workspace.setWorkflowId(201L); + workspace.setWorkflowCode("workflow-support-rag"); + workspace.setWorkflowName("合同知识召回"); + + when(workflowWorkspaceService.getWorkspace(101L, 201L)).thenReturn(workspace); + + mockMvc.perform(get("/api/workflow-workspace/detail") + .param("projectId", "101") + .param("workflowId", "201")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.resultcode").value("0")) + .andExpect(jsonPath("$.data.projectId").value(101)) + .andExpect(jsonPath("$.data.workflowCode").value("workflow-support-rag")) + .andExpect(jsonPath("$.data.workflowName").value("合同知识召回")); + } +}