package jnpf.controller; import com.fasterxml.jackson.databind.ObjectMapper; import cn.dev33.satoken.same.SaSameUtil; import org.mockito.MockedStatic; import org.junit.After; import jnpf.dmsEntity.storage.approval.DmsApprovedItem; import jnpf.dmsEntity.storage.approval.DmsApprovedBatch; import jnpf.dmsEntity.storage.form.DmsApprovedRegistrationForm; import jnpf.fileStorage.dms.*; import jnpf.i18n.config.I18nProperties; import jnpf.util.context.SpringContext; import org.junit.Before; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.MessageSource; import org.springframework.context.support.StaticMessageSource; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import java.util.UUID; import static org.junit.Assert.*; import static org.mockito.Mockito.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; public class DmsWorkflowRegistrationHttpTest { DmsWorkflowFileCreateService register = mock(DmsWorkflowFileCreateService.class); DmsWorkflowFileActivateService activate = mock(DmsWorkflowFileActivateService.class); MockMvc mvc; MockedStatic token; @After public void closeToken() { if (token != null) token.close(); } @Before public void setup() { token = mockStatic(SaSameUtil.class, withSettings().mockMaker(org.mockito.MockMakers.INLINE)); ApplicationContext context = mock(ApplicationContext.class); when(context.getBean(MessageSource.class)).thenReturn(new StaticMessageSource()); when(context.getBean(I18nProperties.class)).thenReturn(new I18nProperties()); SpringContext.setApplicationContext(context); mvc = MockMvcBuilders.standaloneSetup(new DmsFileUploadController(mock(DmsFileStorageService.class), register, activate, mock(DmsWorkflowDownloadAuthorizeService.class), mock(DmsWorkflowPrintAuthorizeService.class))).build(); } @Test public void originalRegisterRouteAcceptsDmsPushWithProgressIdAndFullFileSet() throws Exception { DmsApprovedBatch b = new DmsApprovedBatch(); b.setId(UUID.randomUUID()); b.setStatus("WAITING"); b.setTenantId("tenant"); b.setLeaseToken(UUID.randomUUID().toString()); b.setFlowId("flow"); b.setTaskId("task"); b.setAuditType("xinzeng_shenhe"); b.setSourceDigest("digest"); DmsApprovedItem item = new DmsApprovedItem(); item.setSourceKey("main"); b.setItems(java.util.Collections.singletonList(item)); when(register.process(any(), eq("sign"))).thenReturn(b); String body = mvc.perform(post("/Dms/workflowFileRegister").header("X-DMS-Service-Id", "jnpf-dms").header("X-Audit-Biz-Sign", "sign") .contentType(MediaType.APPLICATION_JSON).content(new ObjectMapper().writeValueAsString(DmsApprovedRegistrationForm.from(b)))) .andExpect(status().isOk()).andReturn().getResponse().getContentAsString(); assertEquals("WAITING", new ObjectMapper().readTree(body).path("data").path("status").asText()); org.mockito.ArgumentCaptor f = org.mockito.ArgumentCaptor.forClass(DmsApprovedRegistrationForm.class); verify(register).process(f.capture(), eq("sign")); assertEquals("task", f.getValue().getTaskId()); assertEquals(b.getId(), f.getValue().getBatchId()); assertEquals(b.getTenantId(), f.getValue().getTenantId()); assertEquals(b.getLeaseToken(), f.getValue().getAttemptToken()); token.verify(SaSameUtil::checkCurrentRequestToken); verifyNoInteractions(activate); } @Test public void obsoleteFileArrayMissingIdentityAndReviewAreRejected() throws Exception { for (String body : new String[]{"[]", "{}", "{\"sourceId\":\"flow\",\"taskId\":\"task\",\"auditType\":\"fushen\"}"}) { mvc.perform(post("/Dms/workflowFileRegister").header("X-DMS-Service-Id", "jnpf-dms").contentType(MediaType.APPLICATION_JSON).content(body)) .andExpect(status().isBadRequest()); } verifyNoInteractions(register, activate); } @Test public void noAdditionalContentRouteIsExposed() throws Exception { mvc.perform(post("/Internal/dms/approved-content").contentType(MediaType.APPLICATION_JSON).content("{}")) .andExpect(status().isNotFound()); verifyNoInteractions(register, activate); } }