package jnpf.dmsService;
|
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
|
import jnpf.audit.sdk.annotation.AuditLog;
|
import jnpf.base.UserInfo;
|
import jnpf.dmsEntity.DmsDanganJieyueFuyinShenqingZixiangEntity;
|
import jnpf.dmsEntity.form.DmsDanganJieyueFuyinJieshouForm;
|
import jnpf.dmsEntity.vo.DmsDanganJieyueFuyinJieshouCheckVO;
|
import jnpf.dmsMapper.DmsDanganJieyueFuyinShenqingZixiangMapper;
|
import jnpf.dmsPermission.DmsCurrentIdentity;
|
import jnpf.dmsService.impl.DmsDanganJieyueFuyinJieshouServiceImpl;
|
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.lang.reflect.Method;
|
import java.util.Arrays;
|
import java.util.Date;
|
import java.util.List;
|
|
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 DmsDanganJieyueFuyinJieshouServiceTest {
|
|
@BeforeEach
|
void setUp() {
|
if (TableInfoHelper.getTableInfo(DmsDanganJieyueFuyinShenqingZixiangEntity.class) == null) {
|
TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new Configuration(), ""),
|
DmsDanganJieyueFuyinShenqingZixiangEntity.class);
|
}
|
}
|
|
@Test
|
void declaresTheBatchReceiveAuditEvent() throws NoSuchMethodException {
|
Method method = DmsDanganJieyueFuyinJieshouServiceImpl.class
|
.getMethod("jieshou", List.class);
|
AuditLog auditLog = method.getAnnotation(AuditLog.class);
|
|
assertNotNull(auditLog);
|
assertEquals("LOAN_COPY_RECEIVE", auditLog.action());
|
assertEquals("档案借阅复印接收", auditLog.label());
|
assertEquals("DMS_LOAN_COPY", auditLog.bizType());
|
assertEquals("档案借阅/复印接收", auditLog.bizModule());
|
assertEquals("", auditLog.bizCodeExpr());
|
assertTrue(!auditLog.bizCodeRequired());
|
assertEquals("dms_dangan_jieyue_fuyin_shenqing_zixiang", auditLog.targetTable());
|
assertEquals("#p0[0].fId", auditLog.targetIdExpr());
|
assertEquals("#p0.![fId]", auditLog.targetIdsExpr());
|
assertTrue(auditLog.diff());
|
assertEquals(DmsDanganJieyueFuyinShenqingZixiangEntity.class, auditLog.entityClass());
|
}
|
|
@Test
|
void receivesEveryRequestedDetailWithTheCurrentUserAndDepartment() throws Exception {
|
DmsDanganJieyueFuyinShenqingZixiangMapper mapper = mock(DmsDanganJieyueFuyinShenqingZixiangMapper.class);
|
DmsCurrentIdentity currentIdentity = mock(DmsCurrentIdentity.class);
|
when(currentIdentity.requireUser()).thenReturn(user("user-1", "org-1"));
|
when(mapper.selectList(any())).thenReturn(Arrays.asList(detail("detail-1", null), detail("detail-2", "")));
|
when(mapper.update(isNull(), any())).thenReturn(2);
|
|
service(mapper, currentIdentity).jieshou(Arrays.asList(item("detail-1"), item("detail-2")));
|
|
ArgumentCaptor<Wrapper<DmsDanganJieyueFuyinShenqingZixiangEntity>> 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("jieshou_riqi"));
|
assertTrue(sqlSet.contains("jieshou_bumen"));
|
assertTrue(update.getParamNameValuePairs().containsValue("user-1"));
|
assertTrue(update.getParamNameValuePairs().containsValue("org-1"));
|
assertNotNull(update.getParamNameValuePairs().values().stream()
|
.filter(Date.class::isInstance)
|
.findFirst()
|
.orElse(null));
|
}
|
|
@Test
|
void rejectsMismatchedIdsBeforeUpdating() {
|
DmsDanganJieyueFuyinShenqingZixiangMapper mapper = mock(DmsDanganJieyueFuyinShenqingZixiangMapper.class);
|
DmsCurrentIdentity currentIdentity = mock(DmsCurrentIdentity.class);
|
DmsDanganJieyueFuyinJieshouForm form = item("detail-1");
|
form.setId("another-detail");
|
|
DataException error = assertThrows(DataException.class,
|
() -> service(mapper, currentIdentity).jieshou(Arrays.asList(form)));
|
|
assertEquals("档案借阅复印子项id与f_id不一致", error.getMessage());
|
verify(mapper, never()).update(any(), any());
|
verify(currentIdentity, never()).requireUser();
|
}
|
|
@Test
|
void rejectsDetailsThatHaveAlreadyBeenReceived() {
|
DmsDanganJieyueFuyinShenqingZixiangMapper mapper = mock(DmsDanganJieyueFuyinShenqingZixiangMapper.class);
|
DmsCurrentIdentity currentIdentity = mock(DmsCurrentIdentity.class);
|
when(mapper.selectList(any())).thenReturn(Arrays.asList(detail("detail-1", "user-0")));
|
|
DataException error = assertThrows(DataException.class,
|
() -> service(mapper, currentIdentity).jieshou(Arrays.asList(item("detail-1"))));
|
|
assertEquals("档案借阅复印子项已接收,不能重复接收", error.getMessage());
|
verify(mapper, never()).update(any(), any());
|
verify(currentIdentity, never()).requireUser();
|
}
|
|
@Test
|
void receivesDetailsWhenTheCurrentUserHasNoDepartment() throws Exception {
|
DmsDanganJieyueFuyinShenqingZixiangMapper mapper = mock(DmsDanganJieyueFuyinShenqingZixiangMapper.class);
|
DmsCurrentIdentity currentIdentity = mock(DmsCurrentIdentity.class);
|
when(currentIdentity.requireUser()).thenReturn(user("user-1", " "));
|
when(mapper.selectList(any())).thenReturn(Arrays.asList(detail("detail-1", null)));
|
when(mapper.update(isNull(), any())).thenReturn(1);
|
|
service(mapper, currentIdentity).jieshou(Arrays.asList(item("detail-1")));
|
|
ArgumentCaptor<Wrapper<DmsDanganJieyueFuyinShenqingZixiangEntity>> 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();
|
assertTrue(update.getParamNameValuePairs().containsValue(null));
|
}
|
|
@Test
|
void usesRequestedReceiverAndDepartmentWhenTheyAreProvided() throws Exception {
|
DmsDanganJieyueFuyinShenqingZixiangMapper mapper = mock(DmsDanganJieyueFuyinShenqingZixiangMapper.class);
|
DmsCurrentIdentity currentIdentity = mock(DmsCurrentIdentity.class);
|
when(currentIdentity.requireUser()).thenReturn(user("current-user", "current-department"));
|
when(mapper.selectList(any())).thenReturn(Arrays.asList(detail("detail-1", null)));
|
when(mapper.update(isNull(), any())).thenReturn(1);
|
DmsDanganJieyueFuyinJieshouForm form = item("detail-1");
|
form.setJieshouRen("requested-user");
|
form.setJieshouBumen("requested-department");
|
|
service(mapper, currentIdentity).jieshou(Arrays.asList(form));
|
|
ArgumentCaptor<Wrapper<DmsDanganJieyueFuyinShenqingZixiangEntity>> 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();
|
assertTrue(update.getParamNameValuePairs().containsValue("requested-user"));
|
assertTrue(update.getParamNameValuePairs().containsValue("requested-department"));
|
}
|
|
@Test
|
void returnsTheAvailableDetailForABoxNumberOrId() throws Exception {
|
DmsDanganJieyueFuyinShenqingZixiangMapper mapper = mock(DmsDanganJieyueFuyinShenqingZixiangMapper.class);
|
DmsCurrentIdentity currentIdentity = mock(DmsCurrentIdentity.class);
|
DmsDanganJieyueFuyinShenqingZixiangEntity detail = detail("detail-1", null);
|
detail.setDanganheId("box-1");
|
detail.setDanganheBianhao("DAH-001");
|
detail.setDanganheMingcheng("档案盒一");
|
detail.setShenqingRen("applicant-1");
|
detail.setShenqingBumen("department-1");
|
detail.setShifouYitongguo("yes");
|
when(mapper.selectList(any())).thenReturn(Arrays.asList(detail));
|
|
DmsDanganJieyueFuyinJieshouCheckVO result = service(mapper, currentIdentity).check("DAH-001");
|
|
assertEquals("detail-1", result.getId());
|
assertEquals("box-1", result.getDanganheId());
|
assertEquals("DAH-001", result.getDanganheBianhao());
|
assertEquals("档案盒一", result.getDanganheMingcheng());
|
assertEquals("applicant-1", result.getShenqingRen());
|
assertEquals("department-1", result.getShenqingBumen());
|
}
|
|
@Test
|
void rejectsWhenNoAvailableDetailExistsForTheBox() {
|
DmsDanganJieyueFuyinShenqingZixiangMapper mapper = mock(DmsDanganJieyueFuyinShenqingZixiangMapper.class);
|
DmsCurrentIdentity currentIdentity = mock(DmsCurrentIdentity.class);
|
when(mapper.selectList(any())).thenReturn(Arrays.asList());
|
|
DataException error = assertThrows(DataException.class,
|
() -> service(mapper, currentIdentity).check("DAH-001"));
|
|
assertEquals("未找到可接收的档案借阅复印子项", error.getMessage());
|
}
|
|
private DmsDanganJieyueFuyinJieshouService service(
|
DmsDanganJieyueFuyinShenqingZixiangMapper mapper, DmsCurrentIdentity currentIdentity) {
|
return new DmsDanganJieyueFuyinJieshouServiceImpl(mapper, currentIdentity);
|
}
|
|
private DmsDanganJieyueFuyinJieshouForm item(String id) {
|
DmsDanganJieyueFuyinJieshouForm form = new DmsDanganJieyueFuyinJieshouForm();
|
form.setId(id);
|
form.setFId(id);
|
return form;
|
}
|
|
private DmsDanganJieyueFuyinShenqingZixiangEntity detail(String id, String jieshouRen) {
|
DmsDanganJieyueFuyinShenqingZixiangEntity detail = new DmsDanganJieyueFuyinShenqingZixiangEntity();
|
detail.setId(id);
|
detail.setJieshouRen(jieshouRen);
|
return detail;
|
}
|
|
private UserInfo user(String userId, String organizeId) {
|
UserInfo user = new UserInfo();
|
user.setUserId(userId);
|
user.setOrganizeId(organizeId);
|
return user;
|
}
|
}
|