From b369527fe13acfc6bb880f646115aaaf48b38afe Mon Sep 17 00:00:00 2001 From: chenxing Date: Wed, 28 Oct 2026 12:31:20 +0800 Subject: [PATCH] =?UTF-8?q?test(flow):=20=E8=A1=A5=E9=BD=90=20F01=20?= =?UTF-8?q?=E6=9D=A5=E6=BA=90=E4=B8=BB=E4=BD=93=E4=B8=8E=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E8=AE=B8=E5=8F=AF=E8=A3=85=E9=85=8D=EF=BC=88=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=AE=88=E5=8D=AB/=E6=8C=89=E4=B8=9A=E5=8A=A1=E9=94=AE?= =?UTF-8?q?=E5=A5=91=E7=BA=A6=E4=B8=A4=E7=B1=BB=E7=9A=84=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E5=A4=B9=E5=85=B7=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oapi/OapiFlowTasksByBizTest.java | 27 +++++++++++++++++++ .../service/OapiFlowApplyDefVersionTest.java | 18 ++++++++++++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/yunhai/flowcenter/oapi/OapiFlowTasksByBizTest.java b/src/test/java/com/yunhai/flowcenter/oapi/OapiFlowTasksByBizTest.java index 8ad9bd5..013e340 100644 --- a/src/test/java/com/yunhai/flowcenter/oapi/OapiFlowTasksByBizTest.java +++ b/src/test/java/com/yunhai/flowcenter/oapi/OapiFlowTasksByBizTest.java @@ -62,6 +62,33 @@ class OapiFlowTasksByBizTest extends FlowTestSupport { public com.yunhai.flowcenter.stub.StubUserClient stubUserClient() { return new com.yunhai.flowcenter.stub.StubUserClient(); } + + /** F01:来源主体由验签上下文解析,本契约测试不覆盖该链,固定返回测试主体 */ + @Bean + @Primary + public com.yunhai.flowcenter.service.FlowSourcePrincipalResolver stubSourcePrincipalResolver() { + com.yunhai.flowcenter.service.FlowSourcePrincipalResolver resolver = + org.mockito.Mockito.mock(com.yunhai.flowcenter.service.FlowSourcePrincipalResolver.class); + org.mockito.Mockito.when(resolver.resolve(org.mockito.ArgumentMatchers.any())) + .thenReturn(new com.yunhai.flowcenter.service.FlowSourcePrincipalResolver.Principal( + "11111111-2222-3333-4444-555555555555", 100018, APP_KEY, "svc-hall")); + return resolver; + } + + /** F01:使用许可在专用测试中覆盖,本契约测试放行并以同一主体回填 */ + @Bean + @Primary + public com.yunhai.flowcenter.service.FlowUsageGrantGuard stubUsageGrantGuard() { + com.yunhai.flowcenter.service.FlowUsageGrantGuard guard = + org.mockito.Mockito.mock(com.yunhai.flowcenter.service.FlowUsageGrantGuard.class); + org.mockito.Mockito.when(guard.requireNewApplyGrant( + org.mockito.ArgumentMatchers.anyLong(), + org.mockito.ArgumentMatchers.any(), + org.mockito.ArgumentMatchers.any( + com.yunhai.flowcenter.service.FlowSourcePrincipalResolver.Principal.class))) + .thenReturn(100018); + return guard; + } } @BeforeEach diff --git a/src/test/java/com/yunhai/flowcenter/service/OapiFlowApplyDefVersionTest.java b/src/test/java/com/yunhai/flowcenter/service/OapiFlowApplyDefVersionTest.java index 6e804ea..7416516 100644 --- a/src/test/java/com/yunhai/flowcenter/service/OapiFlowApplyDefVersionTest.java +++ b/src/test/java/com/yunhai/flowcenter/service/OapiFlowApplyDefVersionTest.java @@ -42,12 +42,14 @@ class OapiFlowApplyDefVersionTest { private static final Long SCH_ID = 1L; private static final String FLOW_GUID = "g-assign"; + private static final String SOURCE_ID = "11111111-2222-3333-4444-555555555555"; private FlwDefRepository defRepository; private FlowInstanceService instanceService; private AssigneeResolver assigneeResolver; private OapiFlowService service; private FlwInstanceRepository instances; + private OpenApiAppClient appClient; @BeforeEach @SuppressWarnings("unchecked") @@ -56,12 +58,26 @@ class OapiFlowApplyDefVersionTest { instanceService = mock(FlowInstanceService.class); assigneeResolver = mock(AssigneeResolver.class); instances = mock(FlwInstanceRepository.class); + appClient = mock(OpenApiAppClient.class); + com.fasterxml.jackson.databind.node.ObjectNode registered = + new ObjectMapper().createObjectNode() + .put("id", 100009) + .put("appCode", "flow-center") + .put("sourcePrincipalId", SOURCE_ID); + when(appClient.getAppByKey(any())).thenReturn(registered); service = new OapiFlowService(defRepository, instances, mock(FlwTaskRepository.class), mock(FlwCcRepository.class), mock(FlwCallbackRegRepository.class), instanceService, mock(FlowTaskService.class), mock(FlowEngine.class), assigneeResolver, new ObjectMapper(), - mock(OpenApiUserClient.class), mock(OpenApiAppClient.class), + mock(OpenApiUserClient.class), appClient, mock(DiagramTokenService.class), mock(ObjectProvider.class)); + // F01:来源解析与使用许可在真实装配中由 Spring 注入,单测按同一契约显式装配 + org.springframework.test.util.ReflectionTestUtils.setField( + service, "sourcePrincipalResolver", new FlowSourcePrincipalResolver(appClient)); + FlowUsageGrantGuard guard = mock(FlowUsageGrantGuard.class); + when(guard.requireNewApplyGrant(anyLong(), any(), + any(FlowSourcePrincipalResolver.Principal.class))).thenReturn(100009); + service.setUsageGrantGuard(guard); // 本校校验在单测里关闭(@Value 字段未注入=默认 false),引擎出参给一个既有办件 when(instanceService.apply(any(FlowInstanceService.ApplyCommand.class))) .thenReturn(new FlowInstanceService.ApplyOutcome(500L, false));