package jnpf.fileStorage.dms; import jnpf.base.ActionResult; import jnpf.base.ActionResultCode; import jnpf.dms.DmsResourceApi; import jnpf.dmsEntity.storage.enums.DmsWorkflowFileType; import jnpf.dmsEntity.storage.form.DmsWorkflowFileActivateForm; import jnpf.dmsEntity.storage.vo.DmsFileUploadVO; import jnpf.dmsEntity.storage.vo.DmsWorkflowFileActivationVO; import jnpf.exception.DataException; import jnpf.flowable.WorkFlowApi; import jnpf.flowable.entity.TaskEntity; import jnpf.flowable.enums.TaskStatusEnum; import org.junit.Before; import org.junit.Test; import java.util.UUID; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThrows; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; public class DmsWorkflowFileActivateServiceTest { private final WorkFlowApi workflowApi = mock(WorkFlowApi.class); private final DmsResourceApi dmsResourceApi = mock(DmsResourceApi.class); private final DmsWorkflowFileActivateService service = new DmsWorkflowFileActivateService(workflowApi, dmsResourceApi); private final DmsWorkflowFileActivateForm form = new DmsWorkflowFileActivateForm(); @Before public void setUp() { form.setSourceId("flow-1"); form.setTaskId("task-1"); form.setFileType(DmsWorkflowFileType.CREATE); } @Test public void passedTaskActivatesAndReturnsResourceCenterFields() { TaskEntity task = task(TaskStatusEnum.PASSED, "flow-1"); when(workflowApi.getInfoSubmit("task-1")).thenReturn(task); UUID documentId = UUID.fromString("018f0000-0000-7000-8000-000000000901"); UUID versionId = UUID.fromString("018f0000-0000-7000-8000-000000000902"); DmsFileUploadVO file = new DmsFileUploadVO(); file.setDocumentId(documentId); file.setFileVersionId(versionId); file.setLifecycleStatus("EFFECTIVE"); when(dmsResourceApi.activateWorkflowFile("jnpf-file", form)).thenReturn(success(file)); DmsWorkflowFileActivationVO result = service.activate(form); assertEquals(TaskStatusEnum.PASSED.getCode(), result.getFlowState()); assertEquals("已通过", result.getFlowStatus()); assertEquals(Boolean.TRUE, result.getCompleted()); assertEquals(documentId, result.getWenjianZhongxinWenjianId()); assertEquals(versionId, result.getWenjianZhongxinBanbenId()); assertEquals("flow-1", result.getFile().getSourceId()); verify(dmsResourceApi).activateWorkflowFile("jnpf-file", form); } @Test public void runningTaskCannotCallDmsActivation() { when(workflowApi.getInfoSubmit("task-1")) .thenReturn(task(TaskStatusEnum.RUNNING, "flow-1")); assertThrows(DataException.class, () -> service.activate(form)); verifyNoInteractions(dmsResourceApi); } @Test public void taskMustBelongToSourceFlowId() { when(workflowApi.getInfoSubmit("task-1")) .thenReturn(task(TaskStatusEnum.PASSED, "other-flow")); assertThrows(DataException.class, () -> service.activate(form)); verifyNoInteractions(dmsResourceApi); } @Test public void failedDmsActivationDoesNotReturnCompletedResult() { when(workflowApi.getInfoSubmit("task-1")) .thenReturn(task(TaskStatusEnum.PASSED, "flow-1")); ActionResult response = new ActionResult<>(); response.setCode(500); response.setMsg("activation failed"); when(dmsResourceApi.activateWorkflowFile("jnpf-file", form)).thenReturn(response); DataException exception = assertThrows(DataException.class, () -> service.activate(form)); assertFalse(exception.getMessage().isEmpty()); } private TaskEntity task(TaskStatusEnum status, String flowId) { TaskEntity task = new TaskEntity(); task.setId("task-1"); task.setFlowId(flowId); task.setStatus(status.getCode()); return task; } private ActionResult success(DmsFileUploadVO file) { ActionResult result = new ActionResult<>(); result.setCode(ActionResultCode.SUCCESS.getCode()); result.setData(file); return result; } }