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<SaSameUtil> 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<DmsApprovedRegistrationForm> 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);
|
}
|
}
|