From 365a42da648eefe18b0384a106656d435f2f7600 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Fri, 12 Oct 2012 09:17:27 -0400 Subject: [PATCH] Add file upload test to Spring MVC Test --- .../MockHttpServletRequestBuilder.java | 2 +- ...ockMultipartHttpServletRequestBuilder.java | 4 +- .../standalone/FileUploadControllerTests.java | 57 +++++++++++++++++++ 3 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 spring-test-mvc/src/test/java/org/springframework/test/web/mock/servlet/samples/standalone/FileUploadControllerTests.java diff --git a/spring-test-mvc/src/main/java/org/springframework/test/web/mock/servlet/request/MockHttpServletRequestBuilder.java b/spring-test-mvc/src/main/java/org/springframework/test/web/mock/servlet/request/MockHttpServletRequestBuilder.java index a1ead6e8379..8d31b4df85f 100644 --- a/spring-test-mvc/src/main/java/org/springframework/test/web/mock/servlet/request/MockHttpServletRequestBuilder.java +++ b/spring-test-mvc/src/main/java/org/springframework/test/web/mock/servlet/request/MockHttpServletRequestBuilder.java @@ -636,7 +636,7 @@ public class MockHttpServletRequestBuilder implements RequestBuilder, Mergeable createServlet3Request(servletContext) : new MockHttpServletRequest(servletContext); } - private static MockHttpServletRequest createServlet3Request(ServletContext servletContext) { + private MockHttpServletRequest createServlet3Request(ServletContext servletContext) { try { String className = "org.springframework.test.web.mock.servlet.request.Servlet3MockHttpServletRequest"; Class clazz = ClassUtils.forName(className, MockHttpServletRequestBuilder.class.getClassLoader()); diff --git a/spring-test-mvc/src/main/java/org/springframework/test/web/mock/servlet/request/MockMultipartHttpServletRequestBuilder.java b/spring-test-mvc/src/main/java/org/springframework/test/web/mock/servlet/request/MockMultipartHttpServletRequestBuilder.java index df2ab3776fa..1d4a6656690 100644 --- a/spring-test-mvc/src/main/java/org/springframework/test/web/mock/servlet/request/MockMultipartHttpServletRequestBuilder.java +++ b/spring-test-mvc/src/main/java/org/springframework/test/web/mock/servlet/request/MockMultipartHttpServletRequestBuilder.java @@ -108,11 +108,11 @@ public class MockMultipartHttpServletRequestBuilder extends MockHttpServletReque return request; } - private static MockMultipartHttpServletRequest createServlet3Request() { + private MockMultipartHttpServletRequest createServlet3Request() { try { String className = "org.springframework.test.web.mock.servlet.request.Servlet3MockMultipartHttpServletRequest"; Class clazz = ClassUtils.forName(className, MockMultipartHttpServletRequestBuilder.class.getClassLoader()); - Constructor constructor = clazz.getConstructor(ServletContext.class); + Constructor constructor = clazz.getDeclaredConstructor(); return (MockMultipartHttpServletRequest) BeanUtils.instantiateClass(constructor); } catch (Throwable t) { diff --git a/spring-test-mvc/src/test/java/org/springframework/test/web/mock/servlet/samples/standalone/FileUploadControllerTests.java b/spring-test-mvc/src/test/java/org/springframework/test/web/mock/servlet/samples/standalone/FileUploadControllerTests.java new file mode 100644 index 00000000000..268dc53c1c2 --- /dev/null +++ b/spring-test-mvc/src/test/java/org/springframework/test/web/mock/servlet/samples/standalone/FileUploadControllerTests.java @@ -0,0 +1,57 @@ +/* + * Copyright 2002-2012 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.test.web.mock.servlet.samples.standalone; + +import static org.springframework.test.web.mock.servlet.request.MockMvcRequestBuilders.fileUpload; +import static org.springframework.test.web.mock.servlet.result.MockMvcResultMatchers.model; +import static org.springframework.test.web.mock.servlet.setup.MockMvcBuilders.standaloneSetup; + +import java.io.IOException; + +import org.junit.Test; +import org.springframework.mock.web.MockMultipartFile; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; + +public class FileUploadControllerTests { + + @Test + public void readString() throws Exception { + + MockMultipartFile file = new MockMultipartFile("file", "orig", null, "bar".getBytes()); + + standaloneSetup(new FileUploadController()).build() + .perform(fileUpload("/fileupload").file(file)) + .andExpect(model().attribute("message", "File 'orig' uploaded successfully")); + } + + + @Controller + private static class FileUploadController { + + @RequestMapping(value="/fileupload", method=RequestMethod.POST) + public String processUpload(@RequestParam MultipartFile file, Model model) throws IOException { + model.addAttribute("message", "File '" + file.getOriginalFilename() + "' uploaded successfully"); + return "redirect:/index"; + } + + } + +}