Browse Source

Polishing in AbstractMockHttpServletRequestBuilder

See gh-35329
pull/35397/head
rstoyanchev 7 months ago
parent
commit
268706abd2
  1. 22
      spring-test/src/main/java/org/springframework/test/web/servlet/request/AbstractMockHttpServletRequestBuilder.java
  2. 44
      spring-test/src/test/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilderTests.java

22
spring-test/src/main/java/org/springframework/test/web/servlet/request/AbstractMockHttpServletRequestBuilder.java

@ -342,7 +342,7 @@ public abstract class AbstractMockHttpServletRequestBuilder<B extends AbstractMo @@ -342,7 +342,7 @@ public abstract class AbstractMockHttpServletRequestBuilder<B extends AbstractMo
* @param values one or more header values
*/
public B header(String name, Object... values) {
addToMultiValueMap(this.headers, name, values);
this.headers.addAll(name, Arrays.asList(values));
return self();
}
@ -372,11 +372,7 @@ public abstract class AbstractMockHttpServletRequestBuilder<B extends AbstractMo @@ -372,11 +372,7 @@ public abstract class AbstractMockHttpServletRequestBuilder<B extends AbstractMo
* @param values one or more values
*/
public B param(String name, String... values) {
if (values.length == 0) {
this.parameters.computeIfAbsent(name, k -> new ArrayList<>());
return self();
}
addToMultiValueMap(this.parameters, name, values);
this.parameters.addAll(name, Arrays.asList(values));
return self();
}
@ -823,10 +819,9 @@ public abstract class AbstractMockHttpServletRequestBuilder<B extends AbstractMo @@ -823,10 +819,9 @@ public abstract class AbstractMockHttpServletRequestBuilder<B extends AbstractMo
if (query != null) {
request.setQueryString(query);
}
addRequestParams(request, UriComponentsBuilder.fromUri(uri).build().getQueryParams());
this.parameters.forEach((name, values) ->
request.addParameter(name, values.toArray(new String[0])));
addRequestParams(request, UriComponentsBuilder.fromUri(uri).build().getQueryParams());
this.parameters.forEach((name, values) -> request.addParameter(name, values.toArray(new String[0])));
if (!this.formFields.isEmpty()) {
if (this.content != null && this.content.length > 0) {
@ -993,19 +988,10 @@ public abstract class AbstractMockHttpServletRequestBuilder<B extends AbstractMo @@ -993,19 +988,10 @@ public abstract class AbstractMockHttpServletRequestBuilder<B extends AbstractMo
return request;
}
private static void addToMap(Map<String, Object> map, String name, Object value) {
Assert.hasLength(name, "'name' must not be empty");
Assert.notNull(value, "'value' must not be null");
map.put(name, value);
}
private static <T> void addToMultiValueMap(MultiValueMap<String, T> map, String name, T[] values) {
Assert.hasLength(name, "'name' must not be empty");
Assert.notEmpty(values, "'values' must not be empty");
for (T value : values) {
map.add(name, value);
}
}
}

44
spring-test/src/test/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilderTests.java

@ -230,7 +230,7 @@ class MockHttpServletRequestBuilderTests { @@ -230,7 +230,7 @@ class MockHttpServletRequestBuilderTests {
}
@Test
void requestParameterFromQuery() {
void requestParameterFromQueryString() {
this.builder = new MockHttpServletRequestBuilder(GET).uri("/?foo=bar&foo=baz");
MockHttpServletRequest request = this.builder.buildRequest(this.servletContext);
@ -241,7 +241,7 @@ class MockHttpServletRequestBuilderTests { @@ -241,7 +241,7 @@ class MockHttpServletRequestBuilderTests {
}
@Test
void requestParameterFromQueryList() {
void requestParameterFromQueryStringWithListValues() {
this.builder = new MockHttpServletRequestBuilder(GET).uri("/?foo[0]=bar&foo[1]=baz");
MockHttpServletRequest request = this.builder.buildRequest(this.servletContext);
@ -263,25 +263,6 @@ class MockHttpServletRequestBuilderTests { @@ -263,25 +263,6 @@ class MockHttpServletRequestBuilderTests {
assertThat(request.getQueryString()).isEqualTo("foo=bar&foo=baz");
}
@Test // gh-35210
void queryParameterWithoutValues() {
this.builder = new MockHttpServletRequestBuilder(GET).uri("/");
this.builder.queryParam("foo");
MockHttpServletRequest request = this.builder.buildRequest(this.servletContext);
assertThat(request.getQueryString()).isEqualTo("foo");
assertThat(request.getParameterMap().get("foo")).containsExactly();
}
@Test
void queryParametersWithUriAndQueryParam() {
this.builder = new MockHttpServletRequestBuilder(GET).uri("/path?param1=value1");
this.builder.queryParam("param1", "value2");
MockHttpServletRequest request = this.builder.buildRequest(this.servletContext);
assertThat(request.getParameterMap().get("param1")).containsExactly("value1", "value2");
}
@Test
void queryParameterMap() {
this.builder = new MockHttpServletRequestBuilder(GET).uri("/");
@ -299,7 +280,7 @@ class MockHttpServletRequestBuilderTests { @@ -299,7 +280,7 @@ class MockHttpServletRequestBuilderTests {
}
@Test
void queryParameterList() {
void queryParameterWithListValues() {
this.builder = new MockHttpServletRequestBuilder(GET).uri("/");
this.builder.queryParam("foo[0]", "bar");
this.builder.queryParam("foo[1]", "baz");
@ -311,6 +292,25 @@ class MockHttpServletRequestBuilderTests { @@ -311,6 +292,25 @@ class MockHttpServletRequestBuilderTests {
assertThat(request.getParameter("foo[1]")).isEqualTo("baz");
}
@Test // gh-35329
void queryParameterAndQueryString() {
this.builder = new MockHttpServletRequestBuilder(GET).uri("/path?param1=value1");
this.builder.queryParam("param1", "value2");
MockHttpServletRequest request = this.builder.buildRequest(this.servletContext);
assertThat(request.getParameterMap().get("param1")).containsExactly("value1", "value2");
}
@Test // gh-35210
void queryParameterWithoutValues() {
this.builder = new MockHttpServletRequestBuilder(GET).uri("/");
this.builder.queryParam("foo");
MockHttpServletRequest request = this.builder.buildRequest(this.servletContext);
assertThat(request.getQueryString()).isEqualTo("foo");
assertThat(request.getParameterMap().get("foo")).containsExactly();
}
@Test
void formField() {
this.builder = new MockHttpServletRequestBuilder(POST).uri("/");

Loading…
Cancel
Save