Skip to content

Harmonize use of uri in MockMvc #4

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ public class MockHttpServletRequestBuilder

private final HttpMethod method;

private final URI url;
private final URI uri;

private String contextPath = "";

Expand Down Expand Up @@ -146,33 +146,33 @@ public class MockHttpServletRequestBuilder
* the {@code MockHttpServletRequest} can be plugged in via
* {@link #with(RequestPostProcessor)}.
* @param httpMethod the HTTP method (GET, POST, etc.)
* @param url a URL template; the resulting URL will be encoded
* @param vars zero or more URI variables
* @param uriTemplate a URI template; the resulting URI will be encoded
* @param uriVariables zero or more URI variables
*/
MockHttpServletRequestBuilder(HttpMethod httpMethod, String url, Object... vars) {
this(httpMethod, initUri(url, vars));
MockHttpServletRequestBuilder(HttpMethod httpMethod, String uriTemplate, Object... uriVariables) {
this(httpMethod, initUri(uriTemplate, uriVariables));
}

private static URI initUri(String url, Object[] vars) {
Assert.notNull(url, "'url' must not be null");
Assert.isTrue(url.isEmpty() || url.startsWith("/") || url.startsWith("http://") || url.startsWith("https://"),
() -> "'url' should start with a path or be a complete HTTP URL: " + url);
String uriString = (url.isEmpty() ? "/" : url);
private static URI initUri(String uri, Object[] vars) {
Assert.notNull(uri, "'uri' must not be null");
Assert.isTrue(uri.isEmpty() || uri.startsWith("/") || uri.startsWith("http://") || uri.startsWith("https://"),
() -> "'uri' should start with a path or be a complete HTTP URI: " + uri);
String uriString = (uri.isEmpty() ? "/" : uri);
return UriComponentsBuilder.fromUriString(uriString).buildAndExpand(vars).encode().toUri();
}

/**
* Alternative to {@link #MockHttpServletRequestBuilder(HttpMethod, String, Object...)}
* with a pre-built URI.
* @param httpMethod the HTTP method (GET, POST, etc.)
* @param url the URL
* @param uri the URI
* @since 4.0.3
*/
MockHttpServletRequestBuilder(HttpMethod httpMethod, URI url) {
MockHttpServletRequestBuilder(HttpMethod httpMethod, URI uri) {
Assert.notNull(httpMethod, "'httpMethod' is required");
Assert.notNull(url, "'url' is required");
Assert.notNull(uri, "'uri' is required");
this.method = httpMethod;
this.url = url;
this.uri = uri;
}


Expand Down Expand Up @@ -363,7 +363,7 @@ public MockHttpServletRequestBuilder headers(HttpHeaders httpHeaders) {
* also use add Servlet request parameters by specifying the query or form
* data through one of the following:
* <ul>
* <li>Supply a URL with a query to {@link MockMvcRequestBuilders}.
* <li>Supply a URI with a query to {@link MockMvcRequestBuilders}.
* <li>Add query params via {@link #queryParam} or {@link #queryParams}.
* <li>Provide {@link #content} with {@link #contentType}
* {@code application/x-www-form-urlencoded}.
Expand Down Expand Up @@ -708,17 +708,17 @@ public final MockHttpServletRequest buildRequest(ServletContext servletContext)
request.setAsyncSupported(true);
request.setMethod(this.method.name());

String requestUri = this.url.getRawPath();
String requestUri = this.uri.getRawPath();
request.setRequestURI(requestUri);

if (this.url.getScheme() != null) {
request.setScheme(this.url.getScheme());
if (this.uri.getScheme() != null) {
request.setScheme(this.uri.getScheme());
}
if (this.url.getHost() != null) {
request.setServerName(this.url.getHost());
if (this.uri.getHost() != null) {
request.setServerName(this.uri.getHost());
}
if (this.url.getPort() != -1) {
request.setServerPort(this.url.getPort());
if (this.uri.getPort() != -1) {
request.setServerPort(this.uri.getPort());
}

updatePathRequestProperties(request, requestUri);
Expand Down Expand Up @@ -753,15 +753,15 @@ public final MockHttpServletRequest buildRequest(ServletContext servletContext)
request.addHeader(HttpHeaders.CONTENT_LENGTH, this.content.length);
}

String query = this.url.getRawQuery();
String query = this.uri.getRawQuery();
if (!this.queryParams.isEmpty()) {
String str = UriComponentsBuilder.newInstance().queryParams(this.queryParams).build().encode().getQuery();
query = StringUtils.hasLength(query) ? (query + "&" + str) : str;
}
if (query != null) {
request.setQueryString(query);
}
addRequestParams(request, UriComponentsBuilder.fromUri(this.url).build().getQueryParams());
addRequestParams(request, UriComponentsBuilder.fromUri(this.uri).build().getQueryParams());

this.parameters.forEach((name, values) -> {
for (String value : values) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2022 the original author or authors.
* Copyright 2002-2024 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.
Expand Down Expand Up @@ -60,20 +60,20 @@ public class MockMultipartHttpServletRequestBuilder extends MockHttpServletReque
* <p>For other ways to initialize a {@code MockMultipartHttpServletRequest},
* see {@link #with(RequestPostProcessor)} and the
* {@link RequestPostProcessor} extension point.
* @param urlTemplate a URL template; the resulting URL will be encoded
* @param uriTemplate a URI template; the resulting URI will be encoded
* @param uriVariables zero or more URI variables
*/
MockMultipartHttpServletRequestBuilder(String urlTemplate, Object... uriVariables) {
this(HttpMethod.POST, urlTemplate, uriVariables);
MockMultipartHttpServletRequestBuilder(String uriTemplate, Object... uriVariables) {
this(HttpMethod.POST, uriTemplate, uriVariables);
}

/**
* Variant of {@link #MockMultipartHttpServletRequestBuilder(String, Object...)}
* that also accepts an {@link HttpMethod}.
* @since 5.3.22
*/
MockMultipartHttpServletRequestBuilder(HttpMethod httpMethod, String urlTemplate, Object... uriVariables) {
super(httpMethod, urlTemplate, uriVariables);
MockMultipartHttpServletRequestBuilder(HttpMethod httpMethod, String uriTemplate, Object... uriVariables) {
super(httpMethod, uriTemplate, uriVariables);
super.contentType(MediaType.MULTIPART_FORM_DATA);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,16 +49,16 @@ public abstract class MockMvcRequestBuilders {

/**
* Create a {@link MockHttpServletRequestBuilder} for a GET request.
* @param urlTemplate a URL template; the resulting URL will be encoded
* @param uriTemplate a URI template; the resulting URI will be encoded
* @param uriVariables zero or more URI variables
*/
public static MockHttpServletRequestBuilder get(String urlTemplate, Object... uriVariables) {
return new MockHttpServletRequestBuilder(HttpMethod.GET, urlTemplate, uriVariables);
public static MockHttpServletRequestBuilder get(String uriTemplate, Object... uriVariables) {
return new MockHttpServletRequestBuilder(HttpMethod.GET, uriTemplate, uriVariables);
}

/**
* Create a {@link MockHttpServletRequestBuilder} for a GET request.
* @param uri the URL
* @param uri the URI
* @since 4.0.3
*/
public static MockHttpServletRequestBuilder get(URI uri) {
Expand All @@ -67,16 +67,16 @@ public static MockHttpServletRequestBuilder get(URI uri) {

/**
* Create a {@link MockHttpServletRequestBuilder} for a POST request.
* @param urlTemplate a URL template; the resulting URL will be encoded
* @param uriTemplate a URI template; the resulting URI will be encoded
* @param uriVariables zero or more URI variables
*/
public static MockHttpServletRequestBuilder post(String urlTemplate, Object... uriVariables) {
return new MockHttpServletRequestBuilder(HttpMethod.POST, urlTemplate, uriVariables);
public static MockHttpServletRequestBuilder post(String uriTemplate, Object... uriVariables) {
return new MockHttpServletRequestBuilder(HttpMethod.POST, uriTemplate, uriVariables);
}

/**
* Create a {@link MockHttpServletRequestBuilder} for a POST request.
* @param uri the URL
* @param uri the URI
* @since 4.0.3
*/
public static MockHttpServletRequestBuilder post(URI uri) {
Expand All @@ -85,16 +85,16 @@ public static MockHttpServletRequestBuilder post(URI uri) {

/**
* Create a {@link MockHttpServletRequestBuilder} for a PUT request.
* @param urlTemplate a URL template; the resulting URL will be encoded
* @param uriTemplate a URI template; the resulting URI will be encoded
* @param uriVariables zero or more URI variables
*/
public static MockHttpServletRequestBuilder put(String urlTemplate, Object... uriVariables) {
return new MockHttpServletRequestBuilder(HttpMethod.PUT, urlTemplate, uriVariables);
public static MockHttpServletRequestBuilder put(String uriTemplate, Object... uriVariables) {
return new MockHttpServletRequestBuilder(HttpMethod.PUT, uriTemplate, uriVariables);
}

/**
* Create a {@link MockHttpServletRequestBuilder} for a PUT request.
* @param uri the URL
* @param uri the URI
* @since 4.0.3
*/
public static MockHttpServletRequestBuilder put(URI uri) {
Expand All @@ -103,16 +103,16 @@ public static MockHttpServletRequestBuilder put(URI uri) {

/**
* Create a {@link MockHttpServletRequestBuilder} for a PATCH request.
* @param urlTemplate a URL template; the resulting URL will be encoded
* @param uriTemplate a URI template; the resulting URI will be encoded
* @param uriVariables zero or more URI variables
*/
public static MockHttpServletRequestBuilder patch(String urlTemplate, Object... uriVariables) {
return new MockHttpServletRequestBuilder(HttpMethod.PATCH, urlTemplate, uriVariables);
public static MockHttpServletRequestBuilder patch(String uriTemplate, Object... uriVariables) {
return new MockHttpServletRequestBuilder(HttpMethod.PATCH, uriTemplate, uriVariables);
}

/**
* Create a {@link MockHttpServletRequestBuilder} for a PATCH request.
* @param uri the URL
* @param uri the URI
* @since 4.0.3
*/
public static MockHttpServletRequestBuilder patch(URI uri) {
Expand All @@ -121,16 +121,16 @@ public static MockHttpServletRequestBuilder patch(URI uri) {

/**
* Create a {@link MockHttpServletRequestBuilder} for a DELETE request.
* @param urlTemplate a URL template; the resulting URL will be encoded
* @param uriTemplate a URI template; the resulting URI will be encoded
* @param uriVariables zero or more URI variables
*/
public static MockHttpServletRequestBuilder delete(String urlTemplate, Object... uriVariables) {
return new MockHttpServletRequestBuilder(HttpMethod.DELETE, urlTemplate, uriVariables);
public static MockHttpServletRequestBuilder delete(String uriTemplate, Object... uriVariables) {
return new MockHttpServletRequestBuilder(HttpMethod.DELETE, uriTemplate, uriVariables);
}

/**
* Create a {@link MockHttpServletRequestBuilder} for a DELETE request.
* @param uri the URL
* @param uri the URI
* @since 4.0.3
*/
public static MockHttpServletRequestBuilder delete(URI uri) {
Expand All @@ -139,16 +139,16 @@ public static MockHttpServletRequestBuilder delete(URI uri) {

/**
* Create a {@link MockHttpServletRequestBuilder} for an OPTIONS request.
* @param urlTemplate a URL template; the resulting URL will be encoded
* @param uriTemplate a URI template; the resulting URI will be encoded
* @param uriVariables zero or more URI variables
*/
public static MockHttpServletRequestBuilder options(String urlTemplate, Object... uriVariables) {
return new MockHttpServletRequestBuilder(HttpMethod.OPTIONS, urlTemplate, uriVariables);
public static MockHttpServletRequestBuilder options(String uriTemplate, Object... uriVariables) {
return new MockHttpServletRequestBuilder(HttpMethod.OPTIONS, uriTemplate, uriVariables);
}

/**
* Create a {@link MockHttpServletRequestBuilder} for an OPTIONS request.
* @param uri the URL
* @param uri the URI
* @since 4.0.3
*/
public static MockHttpServletRequestBuilder options(URI uri) {
Expand All @@ -157,17 +157,17 @@ public static MockHttpServletRequestBuilder options(URI uri) {

/**
* Create a {@link MockHttpServletRequestBuilder} for a HEAD request.
* @param urlTemplate a URL template; the resulting URL will be encoded
* @param uriTemplate a URI template; the resulting URI will be encoded
* @param uriVariables zero or more URI variables
* @since 4.1
*/
public static MockHttpServletRequestBuilder head(String urlTemplate, Object... uriVariables) {
return new MockHttpServletRequestBuilder(HttpMethod.HEAD, urlTemplate, uriVariables);
public static MockHttpServletRequestBuilder head(String uriTemplate, Object... uriVariables) {
return new MockHttpServletRequestBuilder(HttpMethod.HEAD, uriTemplate, uriVariables);
}

/**
* Create a {@link MockHttpServletRequestBuilder} for a HEAD request.
* @param uri the URL
* @param uri the URI
* @since 4.1
*/
public static MockHttpServletRequestBuilder head(URI uri) {
Expand All @@ -177,17 +177,17 @@ public static MockHttpServletRequestBuilder head(URI uri) {
/**
* Create a {@link MockHttpServletRequestBuilder} for a request with the given HTTP method.
* @param method the HTTP method (GET, POST, etc.)
* @param urlTemplate a URL template; the resulting URL will be encoded
* @param uriTemplate a URI template; the resulting URI will be encoded
* @param uriVariables zero or more URI variables
*/
public static MockHttpServletRequestBuilder request(HttpMethod method, String urlTemplate, Object... uriVariables) {
return new MockHttpServletRequestBuilder(method, urlTemplate, uriVariables);
public static MockHttpServletRequestBuilder request(HttpMethod method, String uriTemplate, Object... uriVariables) {
return new MockHttpServletRequestBuilder(method, uriTemplate, uriVariables);
}

/**
* Create a {@link MockHttpServletRequestBuilder} for a request with the given HTTP method.
* @param httpMethod the HTTP method (GET, POST, etc.)
* @param uri the URL
* @param uri the URI
* @since 4.0.3
*/
public static MockHttpServletRequestBuilder request(HttpMethod httpMethod, URI uri) {
Expand All @@ -197,7 +197,7 @@ public static MockHttpServletRequestBuilder request(HttpMethod httpMethod, URI u
/**
* Alternative factory method that allows for custom HTTP verbs (e.g. WebDAV).
* @param httpMethod the HTTP method
* @param uri the URL
* @param uri the URI
* @since 4.3
* @deprecated in favor of {@link #request(HttpMethod, URI)}
*/
Expand All @@ -209,29 +209,29 @@ public static MockHttpServletRequestBuilder request(String httpMethod, URI uri)
/**
* Create a {@link MockMultipartHttpServletRequestBuilder} for a multipart request,
* using POST as the HTTP method.
* @param urlTemplate a URL template; the resulting URL will be encoded
* @param uriTemplate a URI template; the resulting URI will be encoded
* @param uriVariables zero or more URI variables
* @since 5.0
*/
public static MockMultipartHttpServletRequestBuilder multipart(String urlTemplate, Object... uriVariables) {
return new MockMultipartHttpServletRequestBuilder(urlTemplate, uriVariables);
public static MockMultipartHttpServletRequestBuilder multipart(String uriTemplate, Object... uriVariables) {
return new MockMultipartHttpServletRequestBuilder(uriTemplate, uriVariables);
}

/**
* Variant of {@link #multipart(String, Object...)} that also accepts an
* {@link HttpMethod}.
* @param httpMethod the HTTP method to use
* @param urlTemplate a URL template; the resulting URL will be encoded
* @param uriTemplate a URI template; the resulting URI will be encoded
* @param uriVariables zero or more URI variables
* @since 5.3.22
*/
public static MockMultipartHttpServletRequestBuilder multipart(HttpMethod httpMethod, String urlTemplate, Object... uriVariables) {
return new MockMultipartHttpServletRequestBuilder(httpMethod, urlTemplate, uriVariables);
public static MockMultipartHttpServletRequestBuilder multipart(HttpMethod httpMethod, String uriTemplate, Object... uriVariables) {
return new MockMultipartHttpServletRequestBuilder(httpMethod, uriTemplate, uriVariables);
}

/**
* Variant of {@link #multipart(String, Object...)} with a {@link URI}.
* @param uri the URL
* @param uri the URI
* @since 5.0
*/
public static MockMultipartHttpServletRequestBuilder multipart(URI uri) {
Expand All @@ -242,7 +242,7 @@ public static MockMultipartHttpServletRequestBuilder multipart(URI uri) {
* Variant of {@link #multipart(String, Object...)} with a {@link URI} and
* an {@link HttpMethod}.
* @param httpMethod the HTTP method to use
* @param uri the URL
* @param uri the URI
* @since 5.3.21
*/
public static MockMultipartHttpServletRequestBuilder multipart(HttpMethod httpMethod, URI uri) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ void requestUriWithDoubleSlashes() {
@Test // gh-24556
void requestUriWithoutScheme() {
assertThatIllegalArgumentException().isThrownBy(() -> MockMvcRequestBuilders.get("localhost:8080/path"))
.withMessage("'url' should start with a path or be a complete HTTP URL: localhost:8080/path");
.withMessage("'uri' should start with a path or be a complete HTTP URI: localhost:8080/path");
}

@Test
Expand Down