From 06563d8b4b9ec5bb8b328a01f5af73f0dbd14eff Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Fri, 27 Sep 2019 17:38:11 +0200 Subject: [PATCH] Add headerDoesNotExist() to MockRestRequestMatchers Prior to this commit, one could not test for the absence of a specific HTTP header in a request. This commit adds a headerDoesNotExist() method in MockRestRequestMatchers. Closes gh-23721 --- .../web/client/match/MockRestRequestMatchers.java | 14 ++++++++++++++ .../client/match/MockRestRequestMatchersTests.java | 14 ++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/spring-test/src/main/java/org/springframework/test/web/client/match/MockRestRequestMatchers.java b/spring-test/src/main/java/org/springframework/test/web/client/match/MockRestRequestMatchers.java index 038bca51b6..c3f01d4766 100644 --- a/spring-test/src/main/java/org/springframework/test/web/client/match/MockRestRequestMatchers.java +++ b/spring-test/src/main/java/org/springframework/test/web/client/match/MockRestRequestMatchers.java @@ -185,6 +185,20 @@ public abstract class MockRestRequestMatchers { }; } + /** + * Assert that the given request header does not exist. + * @since 5.2 + */ + public static RequestMatcher headerDoesNotExist(String name) { + return request -> { + List headerValues = request.getHeaders().get(name); + if (headerValues != null) { + fail("Expected header <" + name + "> not to exist, but it exists with values: " + + headerValues); + } + }; + } + /** * Access to request body matchers. */ diff --git a/spring-test/src/test/java/org/springframework/test/web/client/match/MockRestRequestMatchersTests.java b/spring-test/src/test/java/org/springframework/test/web/client/match/MockRestRequestMatchersTests.java index 7e98c4042c..6481a3313b 100644 --- a/spring-test/src/test/java/org/springframework/test/web/client/match/MockRestRequestMatchersTests.java +++ b/spring-test/src/test/java/org/springframework/test/web/client/match/MockRestRequestMatchersTests.java @@ -19,6 +19,7 @@ package org.springframework.test.web.client.match; import java.net.URI; import java.util.Arrays; import java.util.Collections; +import java.util.List; import org.junit.jupiter.api.Test; @@ -93,6 +94,19 @@ public class MockRestRequestMatchersTests { MockRestRequestMatchers.header("foo", "bar", "baz").match(this.request); } + @Test + public void headerDoesNotExist() throws Exception { + MockRestRequestMatchers.headerDoesNotExist(null).match(this.request); + MockRestRequestMatchers.headerDoesNotExist("").match(this.request); + MockRestRequestMatchers.headerDoesNotExist("foo").match(this.request); + + List values = Arrays.asList("bar", "baz"); + this.request.getHeaders().put("foo", values); + assertThatThrownBy(() -> MockRestRequestMatchers.headerDoesNotExist("foo").match(this.request)) + .isInstanceOf(AssertionError.class) + .hasMessage("Expected header not to exist, but it exists with values: " + values); + } + @Test public void headerMissing() throws Exception { assertThatThrownBy(() -> MockRestRequestMatchers.header("foo", "bar").match(this.request))