/*
* Copyright 2002-2016 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.test.web.servlet.result;
import org.hamcrest.Matchers;
import org.junit.Test;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.test.web.servlet.StubMvcResult;
/**
* Unit tests for {@link JsonPathResultMatchers}.
*
* @author Rossen Stoyanchev
* @author Craig Andrews
* @author Sam Brannen
* @author Brian Clozel
*/
public class JsonPathResultMatchersTests {
private static final String RESPONSE_CONTENT = "{" + //
"'str': 'foo', " + //
"'num': 5, " + //
"'bool': true, " + //
"'arr': [42], " + //
"'colorMap': {'red': 'rojo'}, " + //
"'emptyString': '', " + //
"'emptyArray': [], " + //
"'emptyMap': {} " + //
"}";
private static final StubMvcResult stubMvcResult;
static {
try {
MockHttpServletResponse response = new MockHttpServletResponse();
response.addHeader("Content-Type", "application/json");
response.getWriter().print(new String(RESPONSE_CONTENT.getBytes("ISO-8859-1")));
stubMvcResult = new StubMvcResult(null, null, null, null, null, null, response);
}
catch (Exception e) {
throw new IllegalStateException(e);
}
}
@Test
public void value() throws Exception {
new JsonPathResultMatchers("$.str").value("foo").match(stubMvcResult);
}
@Test(expected = AssertionError.class)
public void valueNoMatch() throws Exception {
new JsonPathResultMatchers("$.str").value("bogus").match(stubMvcResult);
}
@Test
public void valueWithMatcher() throws Exception {
new JsonPathResultMatchers("$.str").value(Matchers.equalTo("foo")).match(stubMvcResult);
}
@Test(expected = AssertionError.class)
public void valueWithMatcherNoMatch() throws Exception {
new JsonPathResultMatchers("$.str").value(Matchers.equalTo("bogus")).match(stubMvcResult);
}
@Test
public void exists() throws Exception {
new JsonPathResultMatchers("$.str").exists().match(stubMvcResult);
}
@Test
public void existsForAnEmptyArray() throws Exception {
new JsonPathResultMatchers("$.emptyArray").exists().match(stubMvcResult);
}
@Test
public void existsForAnEmptyMap() throws Exception {
new JsonPathResultMatchers("$.emptyMap").exists().match(stubMvcResult);
}
@Test(expected = AssertionError.class)
public void existsNoMatch() throws Exception {
new JsonPathResultMatchers("$.bogus").exists().match(stubMvcResult);
}
@Test
public void doesNotExist() throws Exception {
new JsonPathResultMatchers("$.bogus").doesNotExist().match(stubMvcResult);
}
@Test(expected = AssertionError.class)
public void doesNotExistNoMatch() throws Exception {
new JsonPathResultMatchers("$.str").doesNotExist().match(stubMvcResult);
}
@Test(expected = AssertionError.class)
public void doesNotExistForAnEmptyArray() throws Exception {
new JsonPathResultMatchers("$.emptyArray").doesNotExist().match(stubMvcResult);
}
@Test(expected = AssertionError.class)
public void doesNotExistForAnEmptyMap() throws Exception {
new JsonPathResultMatchers("$.emptyMap").doesNotExist().match(stubMvcResult);
}
@Test
public void isEmptyForAnEmptyString() throws Exception {
new JsonPathResultMatchers("$.emptyString").isEmpty().match(stubMvcResult);
}
@Test
public void isEmptyForAnEmptyArray() throws Exception {
new JsonPathResultMatchers("$.emptyArray").isEmpty().match(stubMvcResult);
}
@Test
public void isEmptyForAnEmptyMap() throws Exception {
new JsonPathResultMatchers("$.emptyMap").isEmpty().match(stubMvcResult);
}
@Test
public void isNotEmptyForString() throws Exception {
new JsonPathResultMatchers("$.str").isNotEmpty().match(stubMvcResult);
}
@Test
public void isNotEmptyForNumber() throws Exception {
new JsonPathResultMatchers("$.num").isNotEmpty().match(stubMvcResult);
}
@Test
public void isNotEmptyForBoolean() throws Exception {
new JsonPathResultMatchers("$.bool").isNotEmpty().match(stubMvcResult);
}
@Test
public void isNotEmptyForArray() throws Exception {
new JsonPathResultMatchers("$.arr").isNotEmpty().match(stubMvcResult);
}
@Test
public void isNotEmptyForMap() throws Exception {
new JsonPathResultMatchers("$.colorMap").isNotEmpty().match(stubMvcResult);
}
@Test(expected = AssertionError.class)
public void isNotEmptyForAnEmptyString() throws Exception {
new JsonPathResultMatchers("$.emptyString").isNotEmpty().match(stubMvcResult);
}
@Test(expected = AssertionError.class)
public void isNotEmptyForAnEmptyArray() throws Exception {
new JsonPathResultMatchers("$.emptyArray").isNotEmpty().match(stubMvcResult);
}
@Test(expected = AssertionError.class)
public void isNotEmptyForAnEmptyMap() throws Exception {
new JsonPathResultMatchers("$.emptyMap").isNotEmpty().match(stubMvcResult);
}
@Test
public void isArray() throws Exception {
new JsonPathResultMatchers("$.arr").isArray().match(stubMvcResult);
}
@Test
public void isArrayForAnEmptyArray() throws Exception {
new JsonPathResultMatchers("$.emptyArray").isArray().match(stubMvcResult);
}
@Test(expected = AssertionError.class)
public void isArrayNoMatch() throws Exception {
new JsonPathResultMatchers("$.bar").isArray().match(stubMvcResult);
}
@Test
public void isMap() throws Exception {
new JsonPathResultMatchers("$.colorMap").isMap().match(stubMvcResult);
}
@Test
public void isMapForAnEmptyMap() throws Exception {
new JsonPathResultMatchers("$.emptyMap").isMap().match(stubMvcResult);
}
@Test(expected = AssertionError.class)
public void isMapNoMatch() throws Exception {
new JsonPathResultMatchers("$.str").isMap().match(stubMvcResult);
}
@Test
public void isBoolean() throws Exception {
new JsonPathResultMatchers("$.bool").isBoolean().match(stubMvcResult);
}
@Test(expected = AssertionError.class)
public void isBooleanNoMatch() throws Exception {
new JsonPathResultMatchers("$.str").isBoolean().match(stubMvcResult);
}
@Test
public void isNumber() throws Exception {
new JsonPathResultMatchers("$.num").isNumber().match(stubMvcResult);
}
@Test(expected = AssertionError.class)
public void isNumberNoMatch() throws Exception {
new JsonPathResultMatchers("$.str").isNumber().match(stubMvcResult);
}
@Test
public void isString() throws Exception {
new JsonPathResultMatchers("$.str").isString().match(stubMvcResult);
}
@Test(expected = AssertionError.class)
public void isStringNoMatch() throws Exception {
new JsonPathResultMatchers("$.arr").isString().match(stubMvcResult);
}
@Test(expected = AssertionError.class)
public void valueWithJsonPrefixNotConfigured() throws Exception {
String jsonPrefix = "prefix";
StubMvcResult result = createPrefixedStubMvcResult(jsonPrefix);
new JsonPathResultMatchers("$.str").value("foo").match(result);
}
@Test(expected = AssertionError.class)
public void valueWithJsonWrongPrefix() throws Exception {
String jsonPrefix = "prefix";
StubMvcResult result = createPrefixedStubMvcResult(jsonPrefix);
new JsonPathResultMatchers("$.str").prefix("wrong").value("foo").match(result);
}
@Test
public void valueWithJsonPrefix() throws Exception {
String jsonPrefix = "prefix";
StubMvcResult result = createPrefixedStubMvcResult(jsonPrefix);
new JsonPathResultMatchers("$.str").prefix(jsonPrefix).value("foo").match(result);
}
@Test(expected = AssertionError.class)
public void prefixWithPayloadNotLongEnough() throws Exception {
MockHttpServletResponse response = new MockHttpServletResponse();
response.addHeader("Content-Type", "application/json");
response.getWriter().print(new String("test".getBytes("ISO-8859-1")));
StubMvcResult result = new StubMvcResult(null, null, null, null, null, null, response);
new JsonPathResultMatchers("$.str").prefix("prefix").value("foo").match(result);
}
private StubMvcResult createPrefixedStubMvcResult(String jsonPrefix) throws Exception {
MockHttpServletResponse response = new MockHttpServletResponse();
response.addHeader("Content-Type", "application/json");
response.getWriter().print(jsonPrefix + new String(RESPONSE_CONTENT.getBytes("ISO-8859-1")));
return new StubMvcResult(null, null, null, null, null, null, response);
}
}