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/DmsDanganCundangJieshouServiceTest.java | 201 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 201 insertions(+), 0 deletions(-)
diff --git a/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsService/DmsDanganCundangJieshouServiceTest.java b/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsService/DmsDanganCundangJieshouServiceTest.java
new file mode 100644
index 0000000..0ec2108
--- /dev/null
+++ b/jnpf-dms/jnpf-dms-biz/src/test/java/jnpf/dmsService/DmsDanganCundangJieshouServiceTest.java
@@ -0,0 +1,201 @@
+package jnpf.dmsService;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
+import jnpf.dmsEntity.DmsDanganCundangShenqingEntity;
+import jnpf.dmsEntity.DmsDanganCundangShenqingDanganheEntity;
+import jnpf.dmsEntity.form.DmsDanganCundangJieshouDanganheForm;
+import jnpf.dmsEntity.form.DmsDanganCundangJieshouForm;
+import jnpf.dmsMapper.DmsDanganCundangShenqingDanganheMapper;
+import jnpf.dmsMapper.DmsDanganCundangShenqingMapper;
+import jnpf.dmsService.impl.DmsDanganCundangJieshouServiceImpl;
+import jnpf.exception.DataException;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.BeforeEach;
+import org.mockito.ArgumentCaptor;
+import org.apache.ibatis.builder.MapperBuilderAssistant;
+import org.apache.ibatis.session.Configuration;
+
+import java.util.Arrays;
+import java.util.Date;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+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 DmsDanganCundangJieshouServiceTest {
+
+ @BeforeEach
+ void setUp() {
+ if (TableInfoHelper.getTableInfo(DmsDanganCundangShenqingDanganheEntity.class) == null) {
+ TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new Configuration(), ""),
+ DmsDanganCundangShenqingDanganheEntity.class);
+ }
+ if (TableInfoHelper.getTableInfo(DmsDanganCundangShenqingEntity.class) == null) {
+ TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new Configuration(), ""),
+ DmsDanganCundangShenqingEntity.class);
+ }
+ }
+
+ @Test
+ void receivesEveryRequestedDanganheInOneConditionalUpdate() throws Exception {
+ DmsDanganCundangShenqingDanganheMapper mapper = mock(DmsDanganCundangShenqingDanganheMapper.class);
+ when(mapper.selectList(any())).thenReturn(Arrays.asList(danganhe("box-1", null), danganhe("box-2", "")));
+ when(mapper.update(isNull(), any())).thenReturn(2);
+ DmsDanganCundangJieshouService service = service(mapper);
+
+ service.jieshou(form(item("box-1", "box-1"), item("box-2", "box-2")));
+
+ ArgumentCaptor<Wrapper<DmsDanganCundangShenqingDanganheEntity>> captor = ArgumentCaptor.forClass(Wrapper.class);
+ verify(mapper).update(isNull(), captor.capture());
+ com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper<?> update =
+ (com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper<?>) captor.getValue();
+ String sqlSet = update.getSqlSet();
+ assertTrue(sqlSet.contains("jieshou_ren"));
+ assertTrue(sqlSet.contains("yijiao_ren"));
+ assertTrue(sqlSet.contains("biz_sign"));
+ assertTrue(sqlSet.contains("biz_review_sign"));
+ assertTrue(sqlSet.contains("jieshou_riqi"));
+ assertTrue(update.getParamNameValuePairs().containsValue("receiver-1"));
+ assertTrue(update.getParamNameValuePairs().containsValue("reviewer-1"));
+ assertTrue(update.getParamNameValuePairs().containsValue("sign-1"));
+ assertTrue(update.getParamNameValuePairs().containsValue("review-sign-1"));
+ assertNotNull(update.getParamNameValuePairs().values().stream()
+ .filter(Date.class::isInstance)
+ .findFirst()
+ .orElse(null));
+ }
+
+ @Test
+ void rejectsWhenAnyDanganheHasAlreadyBeenReceived() {
+ DmsDanganCundangShenqingDanganheMapper mapper = mock(DmsDanganCundangShenqingDanganheMapper.class);
+ when(mapper.selectList(any())).thenReturn(Arrays.asList(danganhe("box-1", null), danganhe("box-2", "receiver-0")));
+ DmsDanganCundangJieshouService service = service(mapper);
+
+ DataException error = assertThrows(DataException.class,
+ () -> service.jieshou(form(item("box-1", "box-1"), item("box-2", "box-2"))));
+
+ assertEquals("妗f鐩掑凡鎺ユ敹锛屼笉鑳介噸澶嶆帴鏀�", error.getMessage());
+ verify(mapper, never()).update(any(), any());
+ }
+
+ @Test
+ void rollsBackWhenAnotherRequestReceivesARecordBeforeTheUpdate() {
+ DmsDanganCundangShenqingDanganheMapper mapper = mock(DmsDanganCundangShenqingDanganheMapper.class);
+ when(mapper.selectList(any())).thenReturn(Arrays.asList(danganhe("box-1", null), danganhe("box-2", null)));
+ when(mapper.update(isNull(), any())).thenReturn(1);
+ DmsDanganCundangJieshouService service = service(mapper);
+
+ DataException error = assertThrows(DataException.class,
+ () -> service.jieshou(form(item("box-1", "box-1"), item("box-2", "box-2"))));
+
+ assertEquals("妗f鐩掑凡鎺ユ敹锛屼笉鑳介噸澶嶆帴鏀�", error.getMessage());
+ }
+
+ @Test
+ void checkSucceedsForAnApprovedUnreceivedDanganhe() throws Exception {
+ DmsDanganCundangShenqingDanganheMapper danganheMapper = mock(DmsDanganCundangShenqingDanganheMapper.class);
+ DmsDanganCundangShenqingMapper shenqingMapper = mock(DmsDanganCundangShenqingMapper.class);
+ when(danganheMapper.selectList(any())).thenReturn(Arrays.asList(danganhe("box-1", null, "shenqing-1")));
+ when(shenqingMapper.selectOne(any())).thenReturn(shenqing("shenqing-1", 2));
+ DmsDanganCundangJieshouService service = new DmsDanganCundangJieshouServiceImpl(
+ danganheMapper, shenqingMapper);
+
+ DmsDanganCundangShenqingDanganheEntity result = service.check("box-1");
+
+ assertEquals("box-1", result.getId());
+ verify(danganheMapper).selectList(any());
+ verify(shenqingMapper).selectOne(any());
+ }
+
+ @Test
+ void checkRejectsUnknownDanganheBeforeCheckingApplication() {
+ DmsDanganCundangShenqingDanganheMapper danganheMapper = mock(DmsDanganCundangShenqingDanganheMapper.class);
+ DmsDanganCundangShenqingMapper shenqingMapper = mock(DmsDanganCundangShenqingMapper.class);
+ when(danganheMapper.selectList(any())).thenReturn(Arrays.asList());
+ DmsDanganCundangJieshouService service = new DmsDanganCundangJieshouServiceImpl(
+ danganheMapper, shenqingMapper);
+
+ DataException error = assertThrows(DataException.class, () -> service.check("missing-box"));
+
+ assertEquals("鏈壘鍒板搴旂殑妗f鐩掕褰�", error.getMessage());
+ verify(shenqingMapper, never()).selectOne(any());
+ }
+
+ @Test
+ void checkRejectsApplicationThatHasNotPassed() {
+ DmsDanganCundangShenqingDanganheMapper danganheMapper = mock(DmsDanganCundangShenqingDanganheMapper.class);
+ DmsDanganCundangShenqingMapper shenqingMapper = mock(DmsDanganCundangShenqingMapper.class);
+ when(danganheMapper.selectList(any())).thenReturn(Arrays.asList(danganhe("box-1", null, "shenqing-1")));
+ when(shenqingMapper.selectOne(any())).thenReturn(shenqing("shenqing-1", 1));
+ DmsDanganCundangJieshouService service = new DmsDanganCundangJieshouServiceImpl(
+ danganheMapper, shenqingMapper);
+
+ DataException error = assertThrows(DataException.class, () -> service.check("box-1"));
+
+ assertEquals("妗f瀛樻。鐢宠灏氭湭瀹℃壒閫氳繃锛屾棤娉曟帴鏀�", error.getMessage());
+ }
+
+ @Test
+ void checkRejectsDanganheThatHasAlreadyBeenReceived() {
+ DmsDanganCundangShenqingDanganheMapper danganheMapper = mock(DmsDanganCundangShenqingDanganheMapper.class);
+ DmsDanganCundangShenqingMapper shenqingMapper = mock(DmsDanganCundangShenqingMapper.class);
+ when(danganheMapper.selectList(any())).thenReturn(Arrays.asList(danganhe("box-1", "receiver-0", "shenqing-1")));
+ when(shenqingMapper.selectOne(any())).thenReturn(shenqing("shenqing-1", 2));
+ DmsDanganCundangJieshouService service = new DmsDanganCundangJieshouServiceImpl(
+ danganheMapper, shenqingMapper);
+
+ DataException error = assertThrows(DataException.class, () -> service.check("box-1"));
+
+ assertEquals("妗f鐩掑凡鎺ユ敹锛屼笉鑳介噸澶嶆帴鏀�", error.getMessage());
+ }
+
+ private DmsDanganCundangJieshouService service(DmsDanganCundangShenqingDanganheMapper danganheMapper) {
+ return new DmsDanganCundangJieshouServiceImpl(danganheMapper,
+ mock(DmsDanganCundangShenqingMapper.class));
+ }
+
+ private DmsDanganCundangJieshouForm form(DmsDanganCundangJieshouDanganheForm... danganhe) {
+ DmsDanganCundangJieshouForm form = new DmsDanganCundangJieshouForm();
+ form.setDanganheXinxi(Arrays.asList(danganhe));
+ form.setBizUserId("receiver-1");
+ form.setBizReviewUser("reviewer-1");
+ form.setBizSign("sign-1");
+ form.setBizReviewSign("review-sign-1");
+ return form;
+ }
+
+ private DmsDanganCundangJieshouDanganheForm item(String id, String fId) {
+ DmsDanganCundangJieshouDanganheForm item = new DmsDanganCundangJieshouDanganheForm();
+ item.setId(id);
+ item.setFId(fId);
+ return item;
+ }
+
+ private DmsDanganCundangShenqingDanganheEntity danganhe(String id, String jieshouRen) {
+ return danganhe(id, jieshouRen, null);
+ }
+
+ private DmsDanganCundangShenqingDanganheEntity danganhe(String id, String jieshouRen, String foreignId) {
+ DmsDanganCundangShenqingDanganheEntity result = new DmsDanganCundangShenqingDanganheEntity();
+ result.setId(id);
+ result.setJieshouRen(jieshouRen);
+ result.setForeignId(foreignId);
+ result.setJieshouRiqi(new Date());
+ return result;
+ }
+
+ private DmsDanganCundangShenqingEntity shenqing(String id, Integer flowState) {
+ DmsDanganCundangShenqingEntity result = new DmsDanganCundangShenqingEntity();
+ result.setId(id);
+ result.setFlowState(flowState);
+ return result;
+ }
+}
--
Gitblit v1.8.0