I am testing an endpoint to upload an array of multipart files along with a String parameter. I am getting the 400 response instead of the 200 (OK). Any thoughts on why I am getting 400 response, which indicates something wrong with my request object. But when I checked the request, the content type is correct.
uploadMyFiles.java endpoint
@PostMapping(path = "/uploadMyFiles", consumes = { MediaType.MULTIPART_FORM_DATA_VALUE })
public Map<String, String> uploadMyFiles(MultipartFile[] multipartFiles, String userName) {
//..
return statusMap
}
My test case
@Test
public void testUploadMyFiles() throws Exception {
byte[] byteContent = new byte[100];
String userName ="testUser"
MockMultipartFile filePart1 = new MockMultipartFile("files", "file1.pdf", "multipart/form-data", content);
MultipartFile[] multipartFiles={filePart1}
Object resultMap;
when(myService.uploadMyFiles(multipartFiles,userName)).thenReturn(Map.of("file1.pdf", "Success"));
MvcResult result = this.mockMvc.perform(MockMvcRequestBuilders.multipart("/uploadMyFiles")
.content(userName)
.content("{userName:testUser}") //tried with this too
.param("userName", "testUser")) //tried with this too
.andExpect(status().isOk())
.andReturn();
assertEquals(HttpStatus.OK, ((ResponseEntity)result.getAsyncResult()).getStatusCode());
}
Debug:
MockHttpServletRequest:
HTTP Method = POST
Request URI = /uploadMyFiles
Parameters = {userName=[testUser]}
Headers = [Content-Type:"multipart/form-data", Content-Length:"23"]
Body = <no character encoding set>
Session Attrs = {}
response
MockHttpServletResponse:
Status = 400
Error message = null
Headers = [Vary:"Origin", "Access-Control-Request-Method", "Access-Control-Request-Headers"]
Content type = null
Body =
Forwarded URL = null
Redirected URL = null
Cookies = []