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("档案盒已关联其他销毁申请,无法重复通过", 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("档案销毁申请明细缺少档案盒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;
|
}
|
}
|