package jnpf.dmsService; import jnpf.base.ActionResult; import jnpf.dms.DmsResourceApi; import jnpf.dmsEntity.DmsWenjianBanbenEntity; import jnpf.dmsEntity.print.form.DmsWorkflowPrintFilesGrantForm; import jnpf.dmsEntity.print.vo.DmsWorkflowPrintFilesGrantResultVO; import jnpf.dmsEntity.waifa.DmsWenjianWaifaShenqingDetailEntity; import jnpf.dmsEntity.waifa.DmsWenjianWaifaShenqingEntity; import jnpf.dmsMapper.DmsWenjianBanbenMapper; import jnpf.dmsMapper.DmsWenjianWaifaShenqingDetailMapper; import jnpf.dmsMapper.DmsWenjianWaifaShenqingMapper; import jnpf.exception.DataException; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; 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.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; class DmsWenjianFuzhuGuanliWaifaServiceTest { private static final UUID DOCUMENT_ID = UUID.fromString("018f0000-0000-7000-8000-000000000911"); private static final UUID FILE_VERSION_ID = UUID.fromString("018f0000-0000-7000-8000-000000000912"); @Test void grantsPermanentPrintPermissionToExternalRequestApplicant() { 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"))); DmsWorkflowPrintFilesGrantResultVO expected = new DmsWorkflowPrintFilesGrantResultVO(1, 1); when(fixture.dmsResourceApi.grantWorkflowPrintFiles( eq("jnpf-flowable"), any())).thenReturn(ActionResult.success("success", expected)); DmsWorkflowPrintFilesGrantResultVO result = fixture.service.waifaWenjianShouquan( " flow-1 ", " task-1 "); assertSame(expected, result); ArgumentCaptor formCaptor = ArgumentCaptor.forClass(DmsWorkflowPrintFilesGrantForm.class); verify(fixture.dmsResourceApi).grantWorkflowPrintFiles( eq("jnpf-flowable"), formCaptor.capture()); DmsWorkflowPrintFilesGrantForm 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()); assertNull(form.getFiles().get(0).getValidTo()); } @Test void rejectsPartialBusinessVersionMatchesBeforeCallingAuthorizationApi() { 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.waifaWenjianShouquan("flow-1", "task-1")); verify(fixture.dmsResourceApi, never()).grantWorkflowPrintFiles(any(), any()); } @Test void rejectsFailedAuthorizationResponse() { Fixture fixture = new Fixture(); when(fixture.shenqingMapper.selectList(any())) .thenReturn(Collections.singletonList(application())); when(fixture.zixiangMapper.selectList(any())) .thenReturn(Collections.singletonList(detail("version-1"))); when(fixture.banbenMapper.selectList(any())) .thenReturn(Collections.singletonList(banben("version-1"))); when(fixture.dmsResourceApi.grantWorkflowPrintFiles(any(), any())) .thenReturn(ActionResult.fail("授权被拒绝")); DataException exception = assertThrows(DataException.class, () -> fixture.service.waifaWenjianShouquan("flow-1", "task-1")); assertEquals("授权被拒绝", exception.getMessage()); } private static DmsWenjianWaifaShenqingEntity application() { DmsWenjianWaifaShenqingEntity entity = new DmsWenjianWaifaShenqingEntity(); entity.setId("application-1"); entity.setTenantId("tenant-1"); entity.setApplicantUserId(" applicant-1 "); return entity; } private static DmsWenjianWaifaShenqingDetailEntity detail(String banbenId) { DmsWenjianWaifaShenqingDetailEntity entity = new DmsWenjianWaifaShenqingDetailEntity(); entity.setId("detail-" + banbenId); entity.setRequestId("application-1"); entity.setTenantId("tenant-1"); entity.setBanbenId(banbenId); 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 DmsWenjianWaifaShenqingMapper shenqingMapper = mock(DmsWenjianWaifaShenqingMapper.class); private final DmsWenjianWaifaShenqingDetailMapper zixiangMapper = mock(DmsWenjianWaifaShenqingDetailMapper.class); private final DmsWenjianBanbenMapper banbenMapper = mock(DmsWenjianBanbenMapper.class); private final DmsResourceApi dmsResourceApi = mock(DmsResourceApi.class); private final DmsWenjianFuzhuGuanliWaifaService service = new DmsWenjianFuzhuGuanliWaifaService( shenqingMapper, zixiangMapper, banbenMapper, dmsResourceApi); } }