From c8aa48faa9a4a3aae642d02850ee0bf6b5d4071c Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Wed, 16 Dec 2015 11:51:59 -0500 Subject: [PATCH] Add params(MultiValueMap) to MockMvc Issue: SPR-13801 --- .../request/MockHttpServletRequestBuilder.java | 15 +++++++++++++++ .../MockHttpServletRequestBuilderTests.java | 17 +++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java index d26e0c985d..e02986e07b 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java @@ -151,6 +151,21 @@ public class MockHttpServletRequestBuilder return this; } + /** + * Add request parameters to the {@link MockHttpServletRequest} for example + * such as when testing a form submission. If called more than once, the new + * values are added. + * @param params the parameters to add + */ + public MockHttpServletRequestBuilder params(MultiValueMap params) { + for (String name : params.keySet()) { + for (String value : params.get(name)) { + this.parameters.add(name, value); + } + } + return this; + } + /** * Add a header to the request. Values are always added. * @param name the header name diff --git a/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilderTests.java b/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilderTests.java index 200ca53b14..90ab35ba0b 100644 --- a/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilderTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilderTests.java @@ -39,6 +39,8 @@ import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpSession; import org.springframework.mock.web.MockServletContext; import org.springframework.util.FileCopyUtils; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; import org.springframework.web.servlet.FlashMap; import org.springframework.web.servlet.support.SessionFlashMapManager; @@ -252,6 +254,21 @@ public class MockHttpServletRequestBuilderTests { assertEquals("foo", request.getQueryString()); } + // SPR-13801 + + @Test + public void requestParameterFromMultiValueMap() throws Exception { + MultiValueMap params = new LinkedMultiValueMap<>(); + params.add("foo", "bar"); + params.add("foo", "baz"); + this.builder = new MockHttpServletRequestBuilder(HttpMethod.POST, "/foo"); + this.builder.params(params); + + MockHttpServletRequest request = this.builder.buildRequest(this.servletContext); + + assertArrayEquals(new String[] {"bar", "baz"}, request.getParameterMap().get("foo")); + } + @Test public void acceptHeader() { this.builder.accept(MediaType.TEXT_HTML, MediaType.APPLICATION_XML);