Skip to content

Commit

Permalink
Allow empty path in MockMvc
Browse files Browse the repository at this point in the history
Closes gh-28823
  • Loading branch information
rstoyanchev committed Jul 14, 2022
1 parent 963fd75 commit bf63309
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2021 the original author or authors.
* Copyright 2002-2022 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 @@ -148,7 +148,7 @@ public class MockHttpServletRequestBuilder

private static URI initUri(String url, Object[] vars) {
Assert.notNull(url, "'url' must not be null");
Assert.isTrue(url.startsWith("/") || url.startsWith("http://") || url.startsWith("https://"), "" +
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);
return UriComponentsBuilder.fromUriString(url).buildAndExpand(vars).encode().toUri();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2020 the original author or authors.
* Copyright 2002-2022 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 @@ -50,6 +50,15 @@ public void controller() {
.expectBody(String.class).isEqualTo("Success");
}

@Test
public void controllerEmptyPath() {
new DefaultControllerSpec(new MyController()).build()
.get().uri("")
.exchange()
.expectStatus().isOk()
.expectBody(String.class).isEqualTo("Success empty path");
}

@Test
public void controllerAdvice() {
new DefaultControllerSpec(new MyController())
Expand Down Expand Up @@ -116,10 +125,15 @@ public void uriTemplate() {
private static class MyController {

@GetMapping("/")
public String handle() {
public String handleRootPath() {
return "Success";
}

@GetMapping
public String handleEmptyPath() {
return "Success empty path";
}

@GetMapping("/exception")
public void handleWithError() {
throw new IllegalStateException();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2002-2021 the original author or authors.
* Copyright 2002-2022 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 @@ -165,6 +165,17 @@ void contextPathServletPathInfo() {
assertThat(request.getPathInfo()).isNull();
}

@Test // gh-28823
void emptyPath() {
this.builder = new MockHttpServletRequestBuilder(HttpMethod.GET, "");
MockHttpServletRequest request = this.builder.buildRequest(this.servletContext);

assertThat(request.getRequestURI()).isEqualTo("");
assertThat(request.getContextPath()).isEqualTo("");
assertThat(request.getServletPath()).isEqualTo("");
assertThat(request.getPathInfo()).isNull();
}

@Test // SPR-16453
void pathInfoIsDecoded() {
this.builder = new MockHttpServletRequestBuilder(HttpMethod.GET, "/travel/hotels 42");
Expand Down

0 comments on commit bf63309

Please sign in to comment.