diff --git a/spring-test/src/main/java/org/springframework/test/web/reactive/server/HeaderAssertions.java b/spring-test/src/main/java/org/springframework/test/web/reactive/server/HeaderAssertions.java
index f49a6a7c8e..8de252143f 100644
--- a/spring-test/src/main/java/org/springframework/test/web/reactive/server/HeaderAssertions.java
+++ b/spring-test/src/main/java/org/springframework/test/web/reactive/server/HeaderAssertions.java
@@ -66,7 +66,7 @@ public class HeaderAssertions {
fail(getMessage(name) + " not found");
}
boolean match = Pattern.compile(pattern).matcher(value).matches();
- String message = getMessage(name) + "=\'" + value + "\' does not match \'" + pattern + "\'";
+ String message = getMessage(name) + "=[" + value + "] does not match [" + pattern + "]";
this.exchangeResult.assertWithDiagnostics(() -> assertTrue(message, match));
return this.responseSpec;
}
@@ -114,14 +114,12 @@ public class HeaderAssertions {
}
- // Private methods
-
private HttpHeaders getHeaders() {
return this.exchangeResult.getResponseHeaders();
}
private String getMessage(String headerName) {
- return "Response header [" + headerName + "]";
+ return "Response header '" + headerName + "'";
}
private WebTestClient.ResponseSpec assertHeader(String name, @Nullable Object expected, @Nullable Object actual) {
diff --git a/spring-test/src/main/java/org/springframework/test/web/reactive/server/JsonPathAssertions.java b/spring-test/src/main/java/org/springframework/test/web/reactive/server/JsonPathAssertions.java
index accd3a3017..d32bc34340 100644
--- a/spring-test/src/main/java/org/springframework/test/web/reactive/server/JsonPathAssertions.java
+++ b/spring-test/src/main/java/org/springframework/test/web/reactive/server/JsonPathAssertions.java
@@ -24,6 +24,7 @@ import org.springframework.test.util.JsonPathExpectationsHelper;
* @author Rossen Stoyanchev
* @since 5.0
* @see https://github.com/jayway/JsonPath
+ * @see JsonPathExpectationsHelper
*/
public class JsonPathAssertions {
diff --git a/spring-test/src/main/java/org/springframework/test/web/reactive/server/StatusAssertions.java b/spring-test/src/main/java/org/springframework/test/web/reactive/server/StatusAssertions.java
index 375bd0f928..b47b8ef68e 100644
--- a/spring-test/src/main/java/org/springframework/test/web/reactive/server/StatusAssertions.java
+++ b/spring-test/src/main/java/org/springframework/test/web/reactive/server/StatusAssertions.java
@@ -18,7 +18,7 @@ package org.springframework.test.web.reactive.server;
import org.springframework.http.HttpStatus;
-import static org.springframework.test.util.AssertionErrors.assertEquals;
+import static org.springframework.test.util.AssertionErrors.*;
/**
* Assertions on the response status.
@@ -134,6 +134,14 @@ public class StatusAssertions {
return assertStatusAndReturn(HttpStatus.UNAUTHORIZED);
}
+ /**
+ * Assert the response status code is {@code HttpStatus.FORBIDDEN} (403).
+ * @since 5.0.2
+ */
+ public WebTestClient.ResponseSpec isForbidden() {
+ return assertStatusAndReturn(HttpStatus.FORBIDDEN);
+ }
+
/**
* Assert the response status code is {@code HttpStatus.NOT_FOUND} (404).
*/
@@ -187,7 +195,6 @@ public class StatusAssertions {
return assertSeriesAndReturn(expected);
}
- // Private methods
private WebTestClient.ResponseSpec assertStatusAndReturn(HttpStatus expected) {
HttpStatus actual = this.exchangeResult.getStatus();
@@ -197,8 +204,8 @@ public class StatusAssertions {
private WebTestClient.ResponseSpec assertSeriesAndReturn(HttpStatus.Series expected) {
HttpStatus status = this.exchangeResult.getStatus();
- String message = "Range for response status value " + status;
- this.exchangeResult.assertWithDiagnostics(() -> assertEquals(message, expected, status.series()));
+ this.exchangeResult.assertWithDiagnostics(() ->
+ assertEquals("Range for response status value " + status, expected, status.series()));
return this.responseSpec;
}
diff --git a/spring-test/src/main/java/org/springframework/test/web/reactive/server/WebTestClient.java b/spring-test/src/main/java/org/springframework/test/web/reactive/server/WebTestClient.java
index 1462468fde..d8e72697b5 100644
--- a/spring-test/src/main/java/org/springframework/test/web/reactive/server/WebTestClient.java
+++ b/spring-test/src/main/java/org/springframework/test/web/reactive/server/WebTestClient.java
@@ -75,6 +75,9 @@ import org.springframework.web.util.UriBuilderFactory;
*
* @author Rossen Stoyanchev
* @since 5.0
+ * @see StatusAssertions
+ * @see HeaderAssertions
+ * @see JsonPathAssertions
*/
public interface WebTestClient {
@@ -154,7 +157,7 @@ public interface WebTestClient {
WebTestClient mutateWith(WebTestClientConfigurer configurer);
- // Static, factory methods
+ // Static factory methods
/**
* Use this server setup to test one `@Controller` at a time.
@@ -261,9 +264,9 @@ public interface WebTestClient {
* Shortcut to build the test client.
*/
WebTestClient build();
-
}
+
/**
* Specification for customizing controller configuration equivalent to, and
* internally delegating to, a {@link WebFluxConfigurer}.
@@ -324,9 +327,9 @@ public interface WebTestClient {
* @see WebFluxConfigurer#configureViewResolvers
*/
ControllerSpec viewResolvers(Consumer consumer);
-
}
+
/**
* Specification for customizing router function configuration.
*/
@@ -336,9 +339,9 @@ public interface WebTestClient {
* Configure handler strategies.
*/
RouterFunctionSpec handlerStrategies(HandlerStrategies handlerStrategies);
-
}
+
/**
* Steps for customizing the {@link WebClient} used to test with
* internally delegating to a {@link WebClient.Builder}.
@@ -433,7 +436,6 @@ public interface WebTestClient {
* Build the {@link WebTestClient} instance.
*/
WebTestClient build();
-
}
@@ -470,9 +472,9 @@ public interface WebTestClient {
* @return spec to add headers or perform the exchange
*/
S uri(Function uriFunction);
-
}
+
/**
* Specification for adding request headers and performing an exchange.
*/
@@ -570,9 +572,9 @@ public interface WebTestClient {
* @return spec for decoding the response
*/
ResponseSpec exchange();
-
}
+
interface RequestBodySpec extends RequestHeadersSpec {
/**
* Set the length of the body in bytes, as specified by the
@@ -617,13 +619,13 @@ public interface WebTestClient {
* @return a {@code Mono} with the response
*/
RequestHeadersSpec> syncBody(Object body);
-
}
- interface RequestHeadersUriSpec>
- extends UriSpec, RequestHeadersSpec {
+
+ interface RequestHeadersUriSpec> extends UriSpec, RequestHeadersSpec {
}
+
interface RequestBodyUriSpec extends RequestBodySpec, RequestHeadersUriSpec {
}
@@ -698,6 +700,7 @@ public interface WebTestClient {
FluxExchangeResult returnResult(ParameterizedTypeReference elementType);
}
+
/**
* Spec for expectations on the response body decoded to a single Object.
*/
@@ -718,9 +721,9 @@ public interface WebTestClient {
* decoded response content.
*/
EntityExchangeResult returnResult();
-
}
+
/**
* Spec for expectations on the response body decoded to a List.
*/
@@ -745,9 +748,9 @@ public interface WebTestClient {
*/
@SuppressWarnings("unchecked")
ListBodySpec doesNotContain(E... elements);
-
}
+
/**
* Spec for expectations on the response body content.
*/
@@ -791,7 +794,6 @@ public interface WebTestClient {
* raw response content.
*/
EntityExchangeResult returnResult();
-
}
}
diff --git a/spring-test/src/test/java/org/springframework/test/web/reactive/server/HeaderAssertionsTests.java b/spring-test/src/test/java/org/springframework/test/web/reactive/server/HeaderAssertionTests.java
similarity index 87%
rename from spring-test/src/test/java/org/springframework/test/web/reactive/server/HeaderAssertionsTests.java
rename to spring-test/src/test/java/org/springframework/test/web/reactive/server/HeaderAssertionTests.java
index 30b3afdeb9..e9dc6d0d7a 100644
--- a/spring-test/src/test/java/org/springframework/test/web/reactive/server/HeaderAssertionsTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/reactive/server/HeaderAssertionTests.java
@@ -30,10 +30,8 @@ import org.springframework.http.MediaType;
import org.springframework.mock.http.client.reactive.MockClientHttpRequest;
import org.springframework.mock.http.client.reactive.MockClientHttpResponse;
-import static junit.framework.TestCase.assertNotNull;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-import static org.mockito.Mockito.mock;
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.*;
/**
* Unit tests for {@link HeaderAssertions}.
@@ -41,11 +39,10 @@ import static org.mockito.Mockito.mock;
* @author Rossen Stoyanchev
* @since 5.0
*/
-public class HeaderAssertionsTests {
-
+public class HeaderAssertionTests {
@Test
- public void valueEquals() throws Exception {
+ public void valueEquals() {
HttpHeaders headers = new HttpHeaders();
headers.add("foo", "bar");
HeaderAssertions assertions = headerAssertions(headers);
@@ -79,7 +76,7 @@ public class HeaderAssertionsTests {
}
@Test
- public void valueEqualsWithMultipeValues() throws Exception {
+ public void valueEqualsWithMultipeValues() {
HttpHeaders headers = new HttpHeaders();
headers.add("foo", "bar");
headers.add("foo", "baz");
@@ -107,7 +104,7 @@ public class HeaderAssertionsTests {
}
@Test
- public void valueMatches() throws Exception {
+ public void valueMatches() {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
HeaderAssertions assertions = headerAssertions(headers);
@@ -122,14 +119,13 @@ public class HeaderAssertionsTests {
catch (AssertionError error) {
Throwable cause = error.getCause();
assertNotNull(cause);
- assertEquals("Response header [Content-Type]='application/json;charset=UTF-8' " +
- "does not match '.*ISO-8859-1.*'", cause.getMessage());
+ assertEquals("Response header 'Content-Type'=[application/json;charset=UTF-8] " +
+ "does not match [.*ISO-8859-1.*]", cause.getMessage());
}
}
@Test
- public void cacheControl() throws Exception {
-
+ public void cacheControl() {
CacheControl control = CacheControl.maxAge(1, TimeUnit.HOURS).noTransform();
HttpHeaders headers = new HttpHeaders();
@@ -148,6 +144,7 @@ public class HeaderAssertionsTests {
}
}
+
private HeaderAssertions headerAssertions(HttpHeaders responseHeaders) {
MockClientHttpRequest request = new MockClientHttpRequest(HttpMethod.GET, URI.create("/"));
MockClientHttpResponse response = new MockClientHttpResponse(HttpStatus.OK);
diff --git a/spring-test/src/test/java/org/springframework/test/web/reactive/server/StatusAssertionTests.java b/spring-test/src/test/java/org/springframework/test/web/reactive/server/StatusAssertionTests.java
index d688d041f2..ccd69c0619 100644
--- a/spring-test/src/test/java/org/springframework/test/web/reactive/server/StatusAssertionTests.java
+++ b/spring-test/src/test/java/org/springframework/test/web/reactive/server/StatusAssertionTests.java
@@ -26,8 +26,8 @@ import org.springframework.http.HttpStatus;
import org.springframework.mock.http.client.reactive.MockClientHttpRequest;
import org.springframework.mock.http.client.reactive.MockClientHttpResponse;
-import static org.junit.Assert.fail;
-import static org.mockito.Mockito.mock;
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.*;
/**
* Unit tests for {@link StatusAssertions}.
@@ -38,8 +38,7 @@ import static org.mockito.Mockito.mock;
public class StatusAssertionTests {
@Test
- public void isEqualTo() throws Exception {
-
+ public void isEqualTo() {
StatusAssertions assertions = statusAssertions(HttpStatus.CONFLICT);
// Success
@@ -64,8 +63,7 @@ public class StatusAssertionTests {
}
@Test
- public void reasonEquals() throws Exception {
-
+ public void reasonEquals() {
StatusAssertions assertions = statusAssertions(HttpStatus.CONFLICT);
// Success
@@ -81,7 +79,7 @@ public class StatusAssertionTests {
}
@Test
- public void statusSerius1xx() throws Exception {
+ public void statusSerius1xx() {
StatusAssertions assertions = statusAssertions(HttpStatus.CONTINUE);
// Success
@@ -97,7 +95,7 @@ public class StatusAssertionTests {
}
@Test
- public void statusSerius2xx() throws Exception {
+ public void statusSerius2xx() {
StatusAssertions assertions = statusAssertions(HttpStatus.OK);
// Success
@@ -113,7 +111,7 @@ public class StatusAssertionTests {
}
@Test
- public void statusSerius3xx() throws Exception {
+ public void statusSerius3xx() {
StatusAssertions assertions = statusAssertions(HttpStatus.PERMANENT_REDIRECT);
// Success
@@ -129,7 +127,7 @@ public class StatusAssertionTests {
}
@Test
- public void statusSerius4xx() throws Exception {
+ public void statusSerius4xx() {
StatusAssertions assertions = statusAssertions(HttpStatus.BAD_REQUEST);
// Success
@@ -145,7 +143,7 @@ public class StatusAssertionTests {
}
@Test
- public void statusSerius5xx() throws Exception {
+ public void statusSerius5xx() {
StatusAssertions assertions = statusAssertions(HttpStatus.INTERNAL_SERVER_ERROR);
// Success