package jnpf.dmsService; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; import jnpf.dmsEntity.DmsDanganCundangShenqingEntity; import jnpf.dmsEntity.DmsDanganCundangShenqingGuidangEntity; import jnpf.dmsEntity.recordprint.DmsJiluDayinLiushuiEntity; import jnpf.dmsMapper.DmsDanganCundangShenqingGuidangMapper; import jnpf.dmsMapper.DmsDanganCundangShenqingMapper; import jnpf.dmsMapper.DmsJiluDayinLiushuiMapper; import jnpf.dmsMapper.DmsWenjianFenfaMapper; import jnpf.dmsService.impl.DmsDanganCundangShenqingTongguoServiceImpl; 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 java.util.Collections; 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 DmsDanganCundangShenqingTongguoServiceTest { @BeforeEach void setUp() { initialize(DmsDanganCundangShenqingEntity.class); initialize(DmsDanganCundangShenqingGuidangEntity.class); initialize(DmsJiluDayinLiushuiEntity.class); } @Test void archivesBothKindsOfPrintSerialForEveryApprovedDetail() throws Exception { DmsDanganCundangShenqingMapper shenqingMapper = mock(DmsDanganCundangShenqingMapper.class); DmsDanganCundangShenqingGuidangMapper guidangMapper = mock(DmsDanganCundangShenqingGuidangMapper.class); DmsJiluDayinLiushuiMapper jiluMapper = mock(DmsJiluDayinLiushuiMapper.class); DmsWenjianFenfaMapper wenjianMapper = mock(DmsWenjianFenfaMapper.class); when(shenqingMapper.selectList(any())).thenReturn(Collections.singletonList(application("apply-1"))); when(guidangMapper.selectList(any())).thenReturn(Arrays.asList( detail("record-1", "file-serial-1"), detail("record-2", "file-serial-2"), detail("record-1", "file-serial-1"))); service(shenqingMapper, guidangMapper, jiluMapper, wenjianMapper).tongguo("flow-1", "task-1"); ArgumentCaptor> updateCaptor = ArgumentCaptor.forClass(Wrapper.class); verify(jiluMapper).update(isNull(), updateCaptor.capture()); LambdaUpdateWrapper update = (LambdaUpdateWrapper) updateCaptor.getValue(); assertTrue(update.getSqlSet().contains("is_guidang")); assertTrue(update.getParamNameValuePairs().containsValue(1)); assertTrue(update.getSqlSegment().contains("f_id")); assertTrue(update.getSqlSegment().contains("f_delete_mark")); verify(wenjianMapper).archivePrintRecords(Arrays.asList("file-serial-1", "file-serial-2")); } @Test void ignoresBlankSerialFields() throws Exception { DmsDanganCundangShenqingMapper shenqingMapper = mock(DmsDanganCundangShenqingMapper.class); DmsDanganCundangShenqingGuidangMapper guidangMapper = mock(DmsDanganCundangShenqingGuidangMapper.class); DmsJiluDayinLiushuiMapper jiluMapper = mock(DmsJiluDayinLiushuiMapper.class); DmsWenjianFenfaMapper wenjianMapper = mock(DmsWenjianFenfaMapper.class); when(shenqingMapper.selectList(any())).thenReturn(Collections.singletonList(application("apply-1"))); when(guidangMapper.selectList(any())).thenReturn(Collections.singletonList(detail(" ", null))); service(shenqingMapper, guidangMapper, jiluMapper, wenjianMapper).tongguo("flow-1", "task-1"); verify(jiluMapper, never()).update(any(), any()); verify(wenjianMapper, never()).archivePrintRecords(any()); } @Test void rejectsAnUnknownApprovalFlow() { DmsDanganCundangShenqingMapper shenqingMapper = mock(DmsDanganCundangShenqingMapper.class); DmsDanganCundangShenqingGuidangMapper guidangMapper = mock(DmsDanganCundangShenqingGuidangMapper.class); DmsJiluDayinLiushuiMapper jiluMapper = mock(DmsJiluDayinLiushuiMapper.class); DmsWenjianFenfaMapper wenjianMapper = mock(DmsWenjianFenfaMapper.class); when(shenqingMapper.selectList(any())).thenReturn(Collections.emptyList()); DataException error = assertThrows(DataException.class, () -> service(shenqingMapper, guidangMapper, jiluMapper, wenjianMapper) .tongguo("flow-1", "task-1")); assertEquals("未找到档案存档申请:flow_id=flow-1, task_id=task-1", error.getMessage()); verify(guidangMapper, never()).selectList(any()); } private void initialize(Class entityClass) { if (TableInfoHelper.getTableInfo(entityClass) == null) { TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new Configuration(), ""), entityClass); } } private DmsDanganCundangShenqingTongguoService service( DmsDanganCundangShenqingMapper shenqingMapper, DmsDanganCundangShenqingGuidangMapper guidangMapper, DmsJiluDayinLiushuiMapper jiluMapper, DmsWenjianFenfaMapper wenjianMapper) { return new DmsDanganCundangShenqingTongguoServiceImpl( shenqingMapper, guidangMapper, jiluMapper, wenjianMapper); } private DmsDanganCundangShenqingEntity application(String id) { DmsDanganCundangShenqingEntity application = new DmsDanganCundangShenqingEntity(); application.setId(id); application.setFlowId("flow-1"); application.setFlowTaskId("task-1"); return application; } private DmsDanganCundangShenqingGuidangEntity detail(String jiluLiushuiId, String wenjianLiushuiId) { DmsDanganCundangShenqingGuidangEntity detail = new DmsDanganCundangShenqingGuidangEntity(); detail.setJiluLiushuiId(jiluLiushuiId); detail.setWenjianLiushuiId(wenjianLiushuiId); return detail; } }