From 34981c30a78e8bbd7791131059a9210f9928b62c Mon Sep 17 00:00:00 2001
From: 刘光辉 <347230014@qq.com>
Date: 星期四, 17 九月 2026 09:24:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into master
---
jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsService/DmsDanganXiaohuiShenqingTongguoServiceTest.java | 140 ++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 140 insertions(+), 0 deletions(-)
diff --git a/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsService/DmsDanganXiaohuiShenqingTongguoServiceTest.java b/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsService/DmsDanganXiaohuiShenqingTongguoServiceTest.java
new file mode 100644
index 0000000..7f552fd
--- /dev/null
+++ b/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsService/DmsDanganXiaohuiShenqingTongguoServiceTest.java
@@ -0,0 +1,140 @@
+package jnpf.dmsService;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
+import jnpf.dmsEntity.DmsDanganCundangShenqingDanganheEntity;
+import jnpf.dmsEntity.DmsDanganXiaohuiShenqingEntity;
+import jnpf.dmsEntity.DmsDanganXiaohuiShenqingZixiangEntity;
+import jnpf.dmsMapper.DmsDanganCundangShenqingDanganheMapper;
+import jnpf.dmsMapper.DmsDanganXiaohuiShenqingMapper;
+import jnpf.dmsMapper.DmsDanganXiaohuiShenqingZixiangMapper;
+import jnpf.dmsService.impl.DmsDanganXiaohuiShenqingTongguoServiceImpl;
+import jnpf.exception.DataException;
+import org.apache.ibatis.builder.MapperBuilderAssistant;
+import org.apache.ibatis.session.Configuration;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.ArgumentCaptor;
+
+import java.util.Arrays;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.isNull;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+class DmsDanganXiaohuiShenqingTongguoServiceTest {
+
+ @BeforeEach
+ void setUp() {
+ initialize(DmsDanganXiaohuiShenqingEntity.class);
+ initialize(DmsDanganXiaohuiShenqingZixiangEntity.class);
+ initialize(DmsDanganCundangShenqingDanganheEntity.class);
+ }
+
+ @Test
+ void assignsEverySelectedDanganheToTheApprovedApplication() throws Exception {
+ DmsDanganXiaohuiShenqingMapper shenqingMapper = mock(DmsDanganXiaohuiShenqingMapper.class);
+ DmsDanganXiaohuiShenqingZixiangMapper zixiangMapper = mock(DmsDanganXiaohuiShenqingZixiangMapper.class);
+ DmsDanganCundangShenqingDanganheMapper danganheMapper = mock(DmsDanganCundangShenqingDanganheMapper.class);
+ when(shenqingMapper.selectList(any())).thenReturn(Arrays.asList(application("destroy-1")));
+ when(zixiangMapper.selectList(any())).thenReturn(Arrays.asList(detail("box-1"), detail("box-2")));
+ when(danganheMapper.selectList(any())).thenReturn(Arrays.asList(sourceBox("box-1", null), sourceBox("box-2", "")));
+ when(danganheMapper.update(isNull(), any())).thenReturn(2);
+
+ service(shenqingMapper, zixiangMapper, danganheMapper).tongguo("flow-1", "task-1");
+
+ ArgumentCaptor<Wrapper<DmsDanganCundangShenqingDanganheEntity>> captor = ArgumentCaptor.forClass(Wrapper.class);
+ verify(danganheMapper).update(isNull(), captor.capture());
+ com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper<?> update =
+ (com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper<?>) captor.getValue();
+ assertTrue(update.getSqlSet().contains("xiaohui_id"));
+ assertTrue(update.getParamNameValuePairs().containsValue("destroy-1"));
+ }
+
+ @Test
+ void allowsAnIdempotentApprovalForTheSameApplication() throws Exception {
+ DmsDanganXiaohuiShenqingMapper shenqingMapper = mock(DmsDanganXiaohuiShenqingMapper.class);
+ DmsDanganXiaohuiShenqingZixiangMapper zixiangMapper = mock(DmsDanganXiaohuiShenqingZixiangMapper.class);
+ DmsDanganCundangShenqingDanganheMapper danganheMapper = mock(DmsDanganCundangShenqingDanganheMapper.class);
+ when(shenqingMapper.selectList(any())).thenReturn(Arrays.asList(application("destroy-1")));
+ when(zixiangMapper.selectList(any())).thenReturn(Arrays.asList(detail("box-1")));
+ when(danganheMapper.selectList(any())).thenReturn(Arrays.asList(sourceBox("box-1", "destroy-1")));
+ when(danganheMapper.update(isNull(), any())).thenReturn(1);
+
+ service(shenqingMapper, zixiangMapper, danganheMapper).tongguo("flow-1", "task-1");
+
+ verify(danganheMapper).update(isNull(), any());
+ }
+
+ @Test
+ void rejectsDanganheAssignedToAnotherDestructionApplication() {
+ DmsDanganXiaohuiShenqingMapper shenqingMapper = mock(DmsDanganXiaohuiShenqingMapper.class);
+ DmsDanganXiaohuiShenqingZixiangMapper zixiangMapper = mock(DmsDanganXiaohuiShenqingZixiangMapper.class);
+ DmsDanganCundangShenqingDanganheMapper danganheMapper = mock(DmsDanganCundangShenqingDanganheMapper.class);
+ when(shenqingMapper.selectList(any())).thenReturn(Arrays.asList(application("destroy-1")));
+ when(zixiangMapper.selectList(any())).thenReturn(Arrays.asList(detail("box-1")));
+ when(danganheMapper.selectList(any())).thenReturn(Arrays.asList(sourceBox("box-1", "destroy-other")));
+
+ DataException error = assertThrows(DataException.class,
+ () -> service(shenqingMapper, zixiangMapper, danganheMapper).tongguo("flow-1", "task-1"));
+
+ assertEquals("妗f鐩掑凡鍏宠仈鍏朵粬閿�姣佺敵璇凤紝鏃犳硶閲嶅閫氳繃", error.getMessage());
+ verify(danganheMapper, never()).update(any(), any());
+ }
+
+ @Test
+ void rejectsBlankDanganheIdBeforeUpdatingAnything() {
+ DmsDanganXiaohuiShenqingMapper shenqingMapper = mock(DmsDanganXiaohuiShenqingMapper.class);
+ DmsDanganXiaohuiShenqingZixiangMapper zixiangMapper = mock(DmsDanganXiaohuiShenqingZixiangMapper.class);
+ DmsDanganCundangShenqingDanganheMapper danganheMapper = mock(DmsDanganCundangShenqingDanganheMapper.class);
+ when(shenqingMapper.selectList(any())).thenReturn(Arrays.asList(application("destroy-1")));
+ when(zixiangMapper.selectList(any())).thenReturn(Arrays.asList(detail(" ")));
+
+ DataException error = assertThrows(DataException.class,
+ () -> service(shenqingMapper, zixiangMapper, danganheMapper).tongguo("flow-1", "task-1"));
+
+ assertEquals("妗f閿�姣佺敵璇锋槑缁嗙己灏戞。妗堢洅ID(danganhe_id)", error.getMessage());
+ verify(danganheMapper, never()).selectList(any());
+ verify(danganheMapper, never()).update(any(), any());
+ }
+
+ private void initialize(Class<?> entityClass) {
+ if (TableInfoHelper.getTableInfo(entityClass) == null) {
+ TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new Configuration(), ""), entityClass);
+ }
+ }
+
+ private DmsDanganXiaohuiShenqingTongguoService service(
+ DmsDanganXiaohuiShenqingMapper shenqingMapper,
+ DmsDanganXiaohuiShenqingZixiangMapper zixiangMapper,
+ DmsDanganCundangShenqingDanganheMapper danganheMapper) {
+ return new DmsDanganXiaohuiShenqingTongguoServiceImpl(shenqingMapper, zixiangMapper, danganheMapper);
+ }
+
+ private DmsDanganXiaohuiShenqingEntity application(String id) {
+ DmsDanganXiaohuiShenqingEntity application = new DmsDanganXiaohuiShenqingEntity();
+ application.setId(id);
+ application.setFlowId("flow-1");
+ application.setFlowTaskId("task-1");
+ return application;
+ }
+
+ private DmsDanganXiaohuiShenqingZixiangEntity detail(String danganheId) {
+ DmsDanganXiaohuiShenqingZixiangEntity detail = new DmsDanganXiaohuiShenqingZixiangEntity();
+ detail.setDanganheId(danganheId);
+ return detail;
+ }
+
+ private DmsDanganCundangShenqingDanganheEntity sourceBox(String id, String xiaohuiId) {
+ DmsDanganCundangShenqingDanganheEntity danganhe = new DmsDanganCundangShenqingDanganheEntity();
+ danganhe.setId(id);
+ danganhe.setXiaohuiId(xiaohuiId);
+ return danganhe;
+ }
+}
--
Gitblit v1.8.0