package jnpf.dmsController; import com.fasterxml.jackson.databind.ObjectMapper; import jnpf.dmsEntity.wenjianbianhao.DmsFlowEventType; import jnpf.dmsEntity.wenjianbianhao.form.DmsFlowEventForm; import jnpf.dmsEntity.wenjianbianhao.vo.DmsWenjianBianhaoRuleVO; import jnpf.dmsService.DmsWenjianBianhaoApplicationService; import jnpf.exception.DataException; import jnpf.flowable.WorkFlowApi; import jnpf.flowable.entity.TaskEntity; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; class DmsWenjianBianhaoControllerTest { private final DmsWenjianBianhaoApplicationService service = mock(DmsWenjianBianhaoApplicationService.class); private final WorkFlowApi workFlowApi = mock(WorkFlowApi.class); private final DmsWenjianBianhaoController controller = new DmsWenjianBianhaoController(service, workFlowApi); @Test void startEventReadsWorkflowStateBeforeCallingBusinessService() throws DataException { DmsFlowEventForm form = form("flow-1", "task-1", DmsFlowEventType.START); TaskEntity task = new TaskEntity(); task.setId("task-1"); task.setStatus(1); when(workFlowApi.getInfoSubmit("task-1")).thenReturn(task); controller.syncApplicationFlowEvent(form); verify(service).syncApplicationFlow( "flow-1", "task-1", 1, DmsFlowEventType.START); } @Test void rejectsMissingWorkflowTask() { DmsFlowEventForm form = form("flow-1", "task-1", DmsFlowEventType.END); when(workFlowApi.getInfoSubmit("task-1")).thenReturn(null); assertThrows(DataException.class, () -> controller.syncApplicationFlowEvent(form)); } @Test void acceptsJnpfSnakeCaseEventParameters() throws Exception { DmsFlowEventForm form = new ObjectMapper().readValue( "{\"flow_id\":\"flow-1\",\"task_id\":\"task-1\",\"event_type\":\"recall\"}", DmsFlowEventForm.class); assertEquals("flow-1", form.getFlowId()); assertEquals("task-1", form.getTaskId()); assertEquals(DmsFlowEventType.RECALL, form.getEventType()); } @Test void ruleOptionUsesJnpfInterfaceFieldNames() throws Exception { DmsWenjianBianhaoRuleVO rule = new DmsWenjianBianhaoRuleVO(); rule.setId("rule-1"); rule.setGuizeMingcheng("QC-SOP规则"); rule.setYulanBianhao("QC-SOP-待审"); rule.setGuizeXianshi("QC-SOP规则 / QC-SOP-待审"); String json = new ObjectMapper().writeValueAsString(rule); org.junit.jupiter.api.Assertions.assertTrue(json.contains("\"f_id\":\"rule-1\"")); org.junit.jupiter.api.Assertions.assertTrue( json.contains("\"yulan_bianhao\":\"QC-SOP-待审\"")); org.junit.jupiter.api.Assertions.assertTrue(json.contains("\"guize_xianshi\"")); } @Test void nameChangeUsesItsIndependentBusinessService() throws DataException { DmsFlowEventForm form = form("flow-2", "task-2", DmsFlowEventType.END); TaskEntity task = new TaskEntity(); task.setId("task-2"); task.setStatus(2); when(workFlowApi.getInfoSubmit("task-2")).thenReturn(task); controller.syncNameChangeFlowEvent(form); verify(service).syncNameChangeFlow( "flow-2", "task-2", 2, DmsFlowEventType.END); } private DmsFlowEventForm form(String flowId, String taskId, DmsFlowEventType eventType) { DmsFlowEventForm form = new DmsFlowEventForm(); form.setFlowId(flowId); form.setTaskId(taskId); form.setEventType(eventType); return form; } }