Skip to content

Commit

Permalink
Add doesNotExist match to HeaderResultMatchers
Browse files Browse the repository at this point in the history
Prior to this commit, one could not test for the absence of
a specific HTTP header in a response.
Using header("X-Custom-Header", Matchers.nullValue()) would not
work because it tests for an empty value of an existing header.

This commit adds a doesNotExist method on the
HeaderResultMatcher.

Issue: SPR-10771
  • Loading branch information
bclozel authored and rstoyanchev committed Oct 7, 2013
1 parent e4479c8 commit 4bf5a02
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 5 deletions.
Expand Up @@ -16,14 +16,13 @@

package org.springframework.test.web.servlet.result;

import static org.springframework.test.util.AssertionErrors.assertEquals;
import static org.springframework.test.util.AssertionErrors.assertTrue;
import static org.springframework.test.util.MatcherAssertionErrors.assertThat;

import org.hamcrest.Matcher;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.ResultMatcher;

import static org.springframework.test.util.AssertionErrors.*;
import static org.springframework.test.util.MatcherAssertionErrors.*;

/**
* Factory for response header assertions. An instance of this
* class is usually accessed via {@link MockMvcResultMatchers#header()}.
Expand Down Expand Up @@ -69,6 +68,20 @@ public void match(MvcResult result) {
};
}

/**
* Assert that the named response header does not exist.
* @since 4.0
*/
public ResultMatcher doesNotExist(final String name) {
return new ResultMatcher() {

@Override
public void match(MvcResult result) {
assertTrue("Response should not contain header " + name, !result.getResponse().containsHeader(name));
}
};
}

/**
* Assert the primary value of the named response header as a {@code long}.
*
Expand Down
Expand Up @@ -35,7 +35,7 @@

/**
* Examples of expectations on response header values.
*
*
* @author Rossen Stoyanchev
* @author Sam Brannen
*/
Expand Down Expand Up @@ -110,6 +110,22 @@ public void longValueWithMissingResponseHeader() throws Exception {
}
}

// SPR-10771

@Test
public void doesNotExist() throws Exception {
this.mockMvc.perform(get("/persons/1"))
.andExpect(header().doesNotExist("X-Custom-Header"));
}

// SPR-10771

@Test(expected = AssertionError.class)
public void doesNotExistFail() throws Exception {
this.mockMvc.perform(get("/persons/1"))
.andExpect(header().doesNotExist(LAST_MODIFIED));
}

@Test
public void stringWithIncorrectResponseHeaderValue() throws Exception {
long unexpected = currentTime + 1;
Expand Down

0 comments on commit 4bf5a02

Please sign in to comment.