package jnpf.dmsService;
|
|
import jnpf.base.ActionResult;
|
import jnpf.dms.DmsResourceApi;
|
import jnpf.dmsEntity.DmsWenjianBanbenEntity;
|
import jnpf.dmsEntity.download.entity.DmsWenjianXiazaiShenqingDetailEntity;
|
import jnpf.dmsEntity.download.entity.DmsWenjianXiazaiShenqingEntity;
|
import jnpf.dmsEntity.permission.form.DmsPersonalFolderDownloadForm;
|
import jnpf.dmsEntity.permission.vo.DmsPersonalFolderAddResultVO;
|
import jnpf.dmsMapper.DmsWenjianBanbenMapper;
|
import jnpf.dmsMapper.DmsWenjianXiazaiShenqingDetailMapper;
|
import jnpf.dmsMapper.DmsWenjianXiazaiShenqingMapper;
|
import jnpf.exception.DataException;
|
import org.junit.jupiter.api.Test;
|
import org.mockito.ArgumentCaptor;
|
|
import java.time.LocalDate;
|
import java.time.LocalDateTime;
|
import java.time.ZoneId;
|
import java.util.Arrays;
|
import java.util.Collections;
|
import java.util.UUID;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
import static org.junit.jupiter.api.Assertions.assertSame;
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.when;
|
|
class DmsWenjianFuzhuGuanliXiazaiServiceTest {
|
|
private static final ZoneId BUSINESS_ZONE = ZoneId.of("Asia/Shanghai");
|
private static final UUID DOCUMENT_ID =
|
UUID.fromString("018f0000-0000-7000-8000-000000000901");
|
private static final UUID FILE_VERSION_ID =
|
UUID.fromString("018f0000-0000-7000-8000-000000000902");
|
|
@Test
|
void authorizesEachDownloadDetailWithEndOfDayValidity() {
|
Fixture fixture = new Fixture();
|
when(fixture.shenqingMapper.selectList(any()))
|
.thenReturn(Collections.singletonList(shenqing()));
|
when(fixture.zixiangMapper.selectList(any()))
|
.thenReturn(Arrays.asList(zixiang("banben-1"), zixiang("banben-1")));
|
when(fixture.banbenMapper.selectList(any()))
|
.thenReturn(Collections.singletonList(banben(true)));
|
DmsPersonalFolderAddResultVO expected = new DmsPersonalFolderAddResultVO(2, 1);
|
when(fixture.dmsResourceApi.addDownloadedFilesToPersonalFolder(
|
eq("jnpf-flowable"), any())).thenReturn(ActionResult.success("success", expected));
|
LocalDate expectedValidDate = LocalDate.now(BUSINESS_ZONE).plusDays(24);
|
|
DmsPersonalFolderAddResultVO result = fixture.service.xiazaiWenjianShouquan(
|
" flow-1 ", " task-1 ");
|
|
assertSame(expected, result);
|
ArgumentCaptor<DmsPersonalFolderDownloadForm> formCaptor =
|
ArgumentCaptor.forClass(DmsPersonalFolderDownloadForm.class);
|
verify(fixture.dmsResourceApi).addDownloadedFilesToPersonalFolder(
|
eq("jnpf-flowable"), formCaptor.capture());
|
DmsPersonalFolderDownloadForm form = formCaptor.getValue();
|
assertEquals("user-1", form.getUserId());
|
assertEquals(2, form.getFiles().size());
|
assertEquals(DOCUMENT_ID, form.getFiles().get(0).getDocumentId());
|
assertEquals(FILE_VERSION_ID, form.getFiles().get(0).getFileVersionId());
|
LocalDateTime validTo = form.getFiles().get(0).getValidTo().toInstant()
|
.atZone(BUSINESS_ZONE).toLocalDateTime();
|
assertEquals(expectedValidDate.atTime(23, 59, 59), validTo);
|
}
|
|
@Test
|
void authorizesNaValidityAsPermanent() {
|
Fixture fixture = new Fixture();
|
DmsWenjianXiazaiShenqingDetailEntity detail = zixiang("banben-1");
|
detail.setXiazaiShixian(" NA ");
|
when(fixture.shenqingMapper.selectList(any()))
|
.thenReturn(Collections.singletonList(shenqing()));
|
when(fixture.zixiangMapper.selectList(any()))
|
.thenReturn(Collections.singletonList(detail));
|
when(fixture.banbenMapper.selectList(any()))
|
.thenReturn(Collections.singletonList(banben(true)));
|
DmsPersonalFolderAddResultVO expected = new DmsPersonalFolderAddResultVO(1, 1);
|
when(fixture.dmsResourceApi.addDownloadedFilesToPersonalFolder(
|
eq("jnpf-flowable"), any())).thenReturn(ActionResult.success("success", expected));
|
|
fixture.service.xiazaiWenjianShouquan("flow-1", "task-1");
|
|
ArgumentCaptor<DmsPersonalFolderDownloadForm> formCaptor =
|
ArgumentCaptor.forClass(DmsPersonalFolderDownloadForm.class);
|
verify(fixture.dmsResourceApi).addDownloadedFilesToPersonalFolder(
|
eq("jnpf-flowable"), formCaptor.capture());
|
assertNull(formCaptor.getValue().getFiles().get(0).getValidTo());
|
}
|
|
@Test
|
void rejectsBusinessVersionWithoutFileCenterIds() {
|
Fixture fixture = new Fixture();
|
when(fixture.shenqingMapper.selectList(any()))
|
.thenReturn(Collections.singletonList(shenqing()));
|
when(fixture.zixiangMapper.selectList(any()))
|
.thenReturn(Collections.singletonList(zixiang("banben-1")));
|
when(fixture.banbenMapper.selectList(any()))
|
.thenReturn(Collections.singletonList(banben(false)));
|
|
assertThrows(DataException.class,
|
() -> fixture.service.xiazaiWenjianShouquan("flow-1", "task-1"));
|
}
|
|
@Test
|
void rejectsDownloadDetailWithoutTimeLimit() {
|
Fixture fixture = new Fixture();
|
DmsWenjianXiazaiShenqingDetailEntity zixiang = zixiang("banben-1");
|
zixiang.setXiazaiShixian(" ");
|
when(fixture.shenqingMapper.selectList(any()))
|
.thenReturn(Collections.singletonList(shenqing()));
|
when(fixture.zixiangMapper.selectList(any()))
|
.thenReturn(Collections.singletonList(zixiang));
|
when(fixture.banbenMapper.selectList(any()))
|
.thenReturn(Collections.singletonList(banben(true)));
|
|
assertThrows(DataException.class,
|
() -> fixture.service.xiazaiWenjianShouquan("flow-1", "task-1"));
|
}
|
|
@Test
|
void rejectsInvalidDownloadTimeLimit() {
|
Fixture fixture = new Fixture();
|
DmsWenjianXiazaiShenqingDetailEntity detail = zixiang("banben-1");
|
detail.setXiazaiShixian("tomorrow");
|
when(fixture.shenqingMapper.selectList(any()))
|
.thenReturn(Collections.singletonList(shenqing()));
|
when(fixture.zixiangMapper.selectList(any()))
|
.thenReturn(Collections.singletonList(detail));
|
when(fixture.banbenMapper.selectList(any()))
|
.thenReturn(Collections.singletonList(banben(true)));
|
|
assertThrows(DataException.class,
|
() -> fixture.service.xiazaiWenjianShouquan("flow-1", "task-1"));
|
}
|
|
private static DmsWenjianXiazaiShenqingEntity shenqing() {
|
DmsWenjianXiazaiShenqingEntity entity = new DmsWenjianXiazaiShenqingEntity();
|
entity.setId("shenqing-1");
|
entity.setApplicantUserId("user-1");
|
return entity;
|
}
|
|
private static DmsWenjianXiazaiShenqingDetailEntity zixiang(String banbenId) {
|
DmsWenjianXiazaiShenqingDetailEntity entity =
|
new DmsWenjianXiazaiShenqingDetailEntity();
|
entity.setBanbenId(banbenId);
|
entity.setXiazaiShixian("24");
|
return entity;
|
}
|
|
private static DmsWenjianBanbenEntity banben(boolean complete) {
|
DmsWenjianBanbenEntity entity = new DmsWenjianBanbenEntity();
|
entity.setId("banben-1");
|
entity.setWenjianZhongxinBanbenId(FILE_VERSION_ID.toString());
|
if (complete) {
|
entity.setWenjianZhongxinWenjianId(DOCUMENT_ID.toString());
|
}
|
return entity;
|
}
|
|
private static final class Fixture {
|
private final DmsWenjianXiazaiShenqingMapper shenqingMapper =
|
mock(DmsWenjianXiazaiShenqingMapper.class);
|
private final DmsWenjianXiazaiShenqingDetailMapper zixiangMapper =
|
mock(DmsWenjianXiazaiShenqingDetailMapper.class);
|
private final DmsWenjianBanbenMapper banbenMapper = mock(DmsWenjianBanbenMapper.class);
|
private final DmsResourceApi dmsResourceApi = mock(DmsResourceApi.class);
|
private final DmsWenjianFuzhuGuanliXiazaiService service =
|
new DmsWenjianFuzhuGuanliXiazaiService(
|
shenqingMapper, zixiangMapper, banbenMapper, dmsResourceApi);
|
}
|
}
|