@Test public void shouldSaveUploadedFile() throws Exception { MockMultipartFile multipartFile = new MockMultipartFile("file", "test.txt", "text/plain", "Spring Framework".getBytes()); this.mvc.perform(fileUpload("/").file(multipartFile)) .andExpect(status().isFound()) .andExpect(header().string("Location", "/")); then(this.storageService).should().store(multipartFile); }
/** * Create a {@link MockMultipartHttpServletRequestBuilder} for a multipart request. * @param urlTemplate a URL template; the resulting URL will be encoded * @param uriVars zero or more URI variables * @since 5.0 */ public static MockMultipartHttpServletRequestBuilder multipart(String urlTemplate, Object... uriVars) { return new MockMultipartHttpServletRequestBuilder(urlTemplate, uriVars); }
@Test public void test() { MockHttpServletRequestBuilder parent = new MockHttpServletRequestBuilder(HttpMethod.GET, "/"); parent.characterEncoding("UTF-8"); Object result = new MockMultipartHttpServletRequestBuilder("/fileUpload").merge(parent); assertNotNull(result); assertEquals(MockMultipartHttpServletRequestBuilder.class, result.getClass()); MockMultipartHttpServletRequestBuilder builder = (MockMultipartHttpServletRequestBuilder) result; MockHttpServletRequest request = builder.buildRequest(new MockServletContext()); assertEquals("UTF-8", request.getCharacterEncoding()); }
@Test public void multipartRequestWithFileList() throws Exception { byte[] fileContent = "bar".getBytes(StandardCharsets.UTF_8); MockMultipartFile filePart1 = new MockMultipartFile("file", "orig", null, fileContent); MockMultipartFile filePart2 = new MockMultipartFile("file", "orig", null, fileContent); byte[] json = "{\"name\":\"yeeeah\"}".getBytes(StandardCharsets.UTF_8); MockMultipartFile jsonPart = new MockMultipartFile("json", "json", "application/json", json); standaloneSetup(new MultipartController()).build() .perform(multipart("/multipartfilelist").file(filePart1).file(filePart2).file(jsonPart)) .andExpect(status().isFound()) .andExpect(model().attribute("fileContent", fileContent)) .andExpect(model().attribute("jsonContent", Collections.singletonMap("name", "yeeeah"))); }
@Test public void testZipFileUploadReplace() throws Exception { // creates some database files for the tests Tuple<File, Tuple<String, String>> testFiles = createTestFiles(); File rootDirectory = testFiles.first; // zip store files File tempDirectory = Files.createTempDirectory("gwc-").toFile(); addFilesToDelete(tempDirectory); File zipFile = new File(tempDirectory, "replace.zip"); zipDirectory(Paths.get(rootDirectory.getPath()), zipFile); try (FileInputStream zipFileInputStream = new FileInputStream(zipFile)) { // perform the rest request MockMultipartFile zipUpload = new MockMultipartFile("file", zipFileInputStream); MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); // execute request mockMvc.perform( MockMvcRequestBuilders.fileUpload("/sqlite/replace") .file(zipUpload) .param("layer", "europe")) .andExpect(status().is(200)); // check that files were replaced checkThatStoreContainsReplacedTiles(testFiles.second.first, testFiles.second.second); } }
@Test public void t002_testDocumentCreate() throws Exception { mvc.perform(get(API_BASE + "/projects/1/documents") .with(csrf().asHeader()) .with(user("admin").roles("ADMIN"))) .andExpect(status().isOk()) .andExpect(content().contentType("application/json;charset=UTF-8")) .andExpect(jsonPath("$.messages").isEmpty()); mvc.perform(multipart(API_BASE + "/projects/1/documents") .file("content", "This is a test.".getBytes("UTF-8")) .with(csrf().asHeader()) .with(user("admin").roles("ADMIN")) .param("name", "test.txt") .param("format", "text")) .andExpect(status().isCreated()) .andExpect(content().contentType("application/json;charset=UTF-8")) .andExpect(jsonPath("$.body.id").value("1")) .andExpect(jsonPath("$.body.name").value("test.txt")); mvc.perform(get(API_BASE + "/projects/1/documents") .with(csrf().asHeader()) .with(user("admin").roles("ADMIN"))) .andExpect(status().isOk()) .andExpect(content().contentType("application/json;charset=UTF-8")) .andExpect(jsonPath("$.body[0].id").value("1")) .andExpect(jsonPath("$.body[0].name").value("test.txt")) .andExpect(jsonPath("$.body[0].state").value("NEW")); }
public void body() throws Exception { // tag::body[] MockMultipartFile image = new MockMultipartFile("image", "image.png", "image/png", "<<png data>>".getBytes()); MockMultipartFile metadata = new MockMultipartFile("metadata", "", "application/json", "{ \"version\": \"1.0\"}".getBytes()); this.mockMvc.perform(fileUpload("/images").file(image).file(metadata) .accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andDo(document("image-upload", requestPartBody("metadata"))); // <1> // end::body[] }
/** * Issue a POST request to the provided URL with the given file passed as form data. * * @param resourceUri the url to issue the request to * @param formFieldName the form field name for the file to be posted * @param file the file to post */ @Override protected void postFileInternal(String resourceUri, String formFieldName, File file) { if (resourceUri.endsWith("/")) { resourceUri = resourceUri.substring(0, resourceUri.length() - 1); } MockMvc mvc = MockMvcBuilders.webAppContextSetup(wac).build(); try (FileInputStream fis = new FileInputStream(file)) { MockMultipartFile mFile = new MockMultipartFile(formFieldName, fis); MockMultipartHttpServletRequestBuilder request = MockMvcRequestBuilders.fileUpload(new URI(resourceUri)).file(mFile); request.requestAttr(RepositoryProvider.KEY, repoProvider); setLastResponse(mvc.perform(request).andReturn()); } catch (Exception e) { Throwables.propagate(e); } }
/** * Create a {@link MockHttpServletRequestBuilder} for a multipart request. The url * template will be captured and made available for documentation. * @param urlTemplate a URL template; the resulting URL will be encoded * @param urlVariables zero or more URL variables * @return the builder for the file upload request */ public static MockMultipartHttpServletRequestBuilder fileUpload(String urlTemplate, Object... urlVariables) { return (MockMultipartHttpServletRequestBuilder) MockMvcRequestBuilders .multipart(urlTemplate, urlVariables) .requestAttr(RestDocumentationGenerator.ATTRIBUTE_NAME_URL_TEMPLATE, urlTemplate); }
@Test public void testLocalDirectoryReplace() throws Exception { // creates some database files for the tests Tuple<File, Tuple<String, String>> testFiles = createTestFiles(); File rootDirectory = testFiles.first; // perform the rest request MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); // execute request mockMvc.perform( MockMvcRequestBuilders.fileUpload("/sqlite/replace") .param("layer", "europe") .param("source", rootDirectory.getPath())) .andExpect(status().is(200)); // check that files were replaced checkThatStoreContainsReplacedTiles(testFiles.second.first, testFiles.second.second); }
@Test public void multipartRequestWithFileArray() throws Exception { byte[] fileContent = "bar".getBytes(StandardCharsets.UTF_8); MockMultipartFile filePart1 = new MockMultipartFile("file", "orig", null, fileContent); MockMultipartFile filePart2 = new MockMultipartFile("file", "orig", null, fileContent); byte[] json = "{\"name\":\"yeeeah\"}".getBytes(StandardCharsets.UTF_8); MockMultipartFile jsonPart = new MockMultipartFile("json", "json", "application/json", json); standaloneSetup(new MultipartController()).build() .perform(multipart("/multipartfilearray").file(filePart1).file(filePart2).file(jsonPart)) .andExpect(status().isFound()) .andExpect(model().attribute("fileContent", fileContent)) .andExpect(model().attribute("jsonContent", Collections.singletonMap("name", "yeeeah"))); }
public void fields() throws Exception { // tag::fields[] MockMultipartFile image = new MockMultipartFile("image", "image.png", "image/png", "<<png data>>".getBytes()); MockMultipartFile metadata = new MockMultipartFile("metadata", "", "application/json", "{ \"version\": \"1.0\"}".getBytes()); this.mockMvc.perform(fileUpload("/images").file(image).file(metadata) .accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andDo(document("image-upload", requestPartFields("metadata", // <1> fieldWithPath("version").description("The version of the image")))); // <2> // end::fields[] }
/** * Create a {@link MockHttpServletRequestBuilder} for a multipart request. The url * template will be captured and made available for documentation. * @param urlTemplate a URL template; the resulting URL will be encoded * @param urlVariables zero or more URL variables * @return the builder for the file upload request */ public static MockMultipartHttpServletRequestBuilder fileUpload(String urlTemplate, Object... urlVariables) { return (MockMultipartHttpServletRequestBuilder) MockMvcRequestBuilders .multipart(urlTemplate, urlVariables) .requestAttr(RestDocumentationGenerator.ATTRIBUTE_NAME_URL_TEMPLATE, urlTemplate); }
@Test public void multipartRequestWithOptionalFileList() throws Exception { byte[] fileContent = "bar".getBytes(StandardCharsets.UTF_8); MockMultipartFile filePart1 = new MockMultipartFile("file", "orig", null, fileContent); MockMultipartFile filePart2 = new MockMultipartFile("file", "orig", null, fileContent); byte[] json = "{\"name\":\"yeeeah\"}".getBytes(StandardCharsets.UTF_8); MockMultipartFile jsonPart = new MockMultipartFile("json", "json", "application/json", json); standaloneSetup(new MultipartController()).build() .perform(multipart("/optionalfilelist").file(filePart1).file(filePart2).file(jsonPart)) .andExpect(status().isFound()) .andExpect(model().attribute("fileContent", fileContent)) .andExpect(model().attribute("jsonContent", Collections.singletonMap("name", "yeeeah"))); }
@Test @Description("Handles POST request for artifact upload. Required Permission: " + SpPermission.CREATE_REPOSITORY) public void postArtifactWithParameters() throws Exception { final SoftwareModule sm = testdataFactory.createSoftwareModuleOs(); final byte random[] = RandomStringUtils.random(5).getBytes(); final MockMultipartFile file = new MockMultipartFile("file", "origFilename", null, random); mockMvc.perform( fileUpload(MgmtRestConstants.SOFTWAREMODULE_V1_REQUEST_MAPPING + "/{softwareModuleId}/artifacts", sm.getId()).file(file).param("filename", "filename").param("file", "s") .param("md5sum", "md5sum").param("sha1sum", "sha1sum")) .andDo(MockMvcResultPrinter.print()).andExpect(status().isBadRequest()) .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)) .andDo(this.document.document(requestParameters( parameterWithName("filename").description(MgmtApiModelProperties.ARTIFACT_PROVIDED_FILENAME), parameterWithName("file").description(MgmtApiModelProperties.ARTIFACT_PROVIDED_FILE), parameterWithName("md5sum").description(MgmtApiModelProperties.ARTIFACT_HASHES_MD5), parameterWithName("sha1sum").description(MgmtApiModelProperties.ARTIFACT_HASHES_SHA1)))); }
/** * Create a {@link MockMultipartHttpServletRequestBuilder} for a multipart request. * @param uri the URL * @since 5.0 */ public static MockMultipartHttpServletRequestBuilder multipart(URI uri) { return new MockMultipartHttpServletRequestBuilder(uri); }
@Test public void multipartRequestWithOptionalFileArray() throws Exception { byte[] fileContent = "bar".getBytes(StandardCharsets.UTF_8); MockMultipartFile filePart1 = new MockMultipartFile("file", "orig", null, fileContent); MockMultipartFile filePart2 = new MockMultipartFile("file", "orig", null, fileContent); byte[] json = "{\"name\":\"yeeeah\"}".getBytes(StandardCharsets.UTF_8); MockMultipartFile jsonPart = new MockMultipartFile("json", "json", "application/json", json); standaloneSetup(new MultipartController()).build() .perform(multipart("/optionalfilearray").file(filePart1).file(filePart2).file(jsonPart)) .andExpect(status().isFound()) .andExpect(model().attribute("fileContent", fileContent)) .andExpect(model().attribute("jsonContent", Collections.singletonMap("name", "yeeeah"))); }