package jnpf.dmsService;
|
|
import jnpf.base.ActionResult;
|
import jnpf.dms.DmsResourceApi;
|
import jnpf.dmsEntity.DmsWenjianBanbenEntity;
|
import jnpf.dmsEntity.DmsWenjianChayueShenqingEntity;
|
import jnpf.dmsEntity.DmsWenjianChayueShenqingZixiangEntity;
|
import jnpf.dmsEntity.permission.form.DmsPersonalFolderBorrowForm;
|
import jnpf.dmsEntity.permission.vo.DmsPersonalFolderAddResultVO;
|
import jnpf.dmsMapper.DmsWenjianBanbenMapper;
|
import jnpf.dmsMapper.DmsWenjianChayueShenqingMapper;
|
import jnpf.dmsMapper.DmsWenjianChayueShenqingZixiangMapper;
|
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.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.never;
|
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.when;
|
|
class DmsWenjianFuzhuGuanliChayueServiceTest {
|
|
private static final ZoneId BUSINESS_ZONE = ZoneId.of("Asia/Shanghai");
|
private static final UUID DOCUMENT_ID =
|
UUID.fromString("018f0000-0000-7000-8000-000000000801");
|
private static final UUID FILE_VERSION_ID =
|
UUID.fromString("018f0000-0000-7000-8000-000000000802");
|
|
@Test
|
void authorizesApplicationVersionsForTheApplicant() {
|
Fixture fixture = new Fixture();
|
when(fixture.shenqingMapper.selectList(any()))
|
.thenReturn(Collections.singletonList(application()));
|
when(fixture.zixiangMapper.selectList(any()))
|
.thenReturn(Arrays.asList(detail("version-1"), detail("version-1")));
|
when(fixture.banbenMapper.selectList(any()))
|
.thenReturn(Collections.singletonList(banben("version-1")));
|
DmsPersonalFolderAddResultVO expected = new DmsPersonalFolderAddResultVO(1, 1);
|
when(fixture.dmsResourceApi.addBorrowedFilesToPersonalFolder(
|
eq("jnpf-flowable"), any())).thenReturn(ActionResult.success("success", expected));
|
|
DmsPersonalFolderAddResultVO result = fixture.service.chayueWenjianShouquan(
|
" flow-1 ", " task-1 ");
|
|
assertSame(expected, result);
|
ArgumentCaptor<DmsPersonalFolderBorrowForm> formCaptor =
|
ArgumentCaptor.forClass(DmsPersonalFolderBorrowForm.class);
|
verify(fixture.dmsResourceApi).addBorrowedFilesToPersonalFolder(
|
eq("jnpf-flowable"), formCaptor.capture());
|
DmsPersonalFolderBorrowForm form = formCaptor.getValue();
|
assertEquals("applicant-1", form.getUserId());
|
assertEquals(1, 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(LocalDate.now(BUSINESS_ZONE).plusDays(2), validTo.toLocalDate());
|
assertEquals(23, validTo.getHour());
|
assertEquals(59, validTo.getMinute());
|
assertEquals(59, validTo.getSecond());
|
assertEquals(0, validTo.getNano());
|
}
|
|
@Test
|
void rejectsPartialBusinessVersionMatchesBeforeCallingTheAuthorizationApi() {
|
Fixture fixture = new Fixture();
|
when(fixture.shenqingMapper.selectList(any()))
|
.thenReturn(Collections.singletonList(application()));
|
when(fixture.zixiangMapper.selectList(any()))
|
.thenReturn(Arrays.asList(detail("version-1"), detail("version-2")));
|
when(fixture.banbenMapper.selectList(any()))
|
.thenReturn(Collections.singletonList(banben("version-1")));
|
|
assertThrows(DataException.class,
|
() -> fixture.service.chayueWenjianShouquan("flow-1", "task-1"));
|
|
verify(fixture.dmsResourceApi, never())
|
.addBorrowedFilesToPersonalFolder(any(), any());
|
}
|
|
@Test
|
void rejectsNonNumericChayueQixianBeforeCallingTheAuthorizationApi() {
|
Fixture fixture = new Fixture();
|
when(fixture.shenqingMapper.selectList(any()))
|
.thenReturn(Collections.singletonList(application()));
|
when(fixture.zixiangMapper.selectList(any()))
|
.thenReturn(Collections.singletonList(detail("version-1", "invalid")));
|
|
assertThrows(DataException.class,
|
() -> fixture.service.chayueWenjianShouquan("flow-1", "task-1"));
|
|
verify(fixture.banbenMapper, never()).selectList(any());
|
verify(fixture.dmsResourceApi, never())
|
.addBorrowedFilesToPersonalFolder(any(), any());
|
}
|
|
private static DmsWenjianChayueShenqingEntity application() {
|
DmsWenjianChayueShenqingEntity entity = new DmsWenjianChayueShenqingEntity();
|
entity.setId("application-1");
|
entity.setShenqingren(" applicant-1 ");
|
return entity;
|
}
|
|
private static DmsWenjianChayueShenqingZixiangEntity detail(String banbenId) {
|
return detail(banbenId, "2");
|
}
|
|
private static DmsWenjianChayueShenqingZixiangEntity detail(
|
String banbenId, String chayueQixian) {
|
DmsWenjianChayueShenqingZixiangEntity entity =
|
new DmsWenjianChayueShenqingZixiangEntity();
|
entity.setBanbenId(banbenId);
|
entity.setChayueQixian(chayueQixian);
|
return entity;
|
}
|
|
private static DmsWenjianBanbenEntity banben(String banbenId) {
|
DmsWenjianBanbenEntity entity = new DmsWenjianBanbenEntity();
|
entity.setId(banbenId);
|
entity.setTenantId("tenant-1");
|
entity.setWenjianZhongxinWenjianId(DOCUMENT_ID.toString());
|
entity.setWenjianZhongxinBanbenId(FILE_VERSION_ID.toString());
|
return entity;
|
}
|
|
private static class Fixture {
|
private final DmsWenjianChayueShenqingMapper shenqingMapper =
|
mock(DmsWenjianChayueShenqingMapper.class);
|
private final DmsWenjianChayueShenqingZixiangMapper zixiangMapper =
|
mock(DmsWenjianChayueShenqingZixiangMapper.class);
|
private final DmsWenjianBanbenMapper banbenMapper = mock(DmsWenjianBanbenMapper.class);
|
private final DmsResourceApi dmsResourceApi = mock(DmsResourceApi.class);
|
private final DmsWenjianFuzhuGuanliChayueService service =
|
new DmsWenjianFuzhuGuanliChayueService(
|
shenqingMapper, zixiangMapper, banbenMapper, dmsResourceApi);
|
}
|
}
|