/* (c) 2017 Open Source Geospatial Foundation - all rights reserved
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.rest.catalog;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.Objects;
import javax.servlet.http.HttpServletResponse;
import org.springframework.http.HttpStatus;
import org.springframework.mock.web.MockHttpServletResponse;
import org.hamcrest.BaseMatcher;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
public class HttpTestUtils {
private HttpTestUtils() {throw new UnsupportedOperationException();}
public static Matcher<HttpServletResponse> hasStatus(HttpStatus expectedStatus) {
return new BaseMatcher<HttpServletResponse>(){
@Override
public boolean matches(Object item) {
if(item instanceof HttpServletResponse) {
HttpStatus value = HttpStatus.valueOf(((HttpServletResponse) item).getStatus());
return value==expectedStatus;
} else {
return false;
}
}
@Override
public void describeTo(Description description) {
description.appendText("HTTP Response with status ")
.appendValue(expectedStatus.value()).appendText(" ")
.appendValue(expectedStatus.getReasonPhrase());
}
@Override
public void describeMismatch(Object item, Description description) {
if(item instanceof HttpServletResponse) {
HttpStatus value = HttpStatus.valueOf(((HttpServletResponse) item).getStatus());
description.appendText("status was ")
.appendValue(value.value()).appendText(" ")
.appendValue(value.getReasonPhrase());
} else {
description.appendText("was not an HttpServletResponse");
}
}
};
}
public static Matcher<HttpServletResponse> hasHeader(String name, Matcher<String> valueMatcher) {
return new BaseMatcher<HttpServletResponse>(){
@Override
public boolean matches(Object item) {
if(item instanceof HttpServletResponse) {
String value = ((HttpServletResponse) item).getHeader(name);
return !Objects.isNull(value) && valueMatcher.matches(value);
} else {
return false;
}
}
@Override
public void describeTo(Description description) {
description
.appendText("HTTP Response with header ")
.appendValue(name)
.appendText(" with value ")
.appendDescriptionOf(valueMatcher);
}
@Override
public void describeMismatch(Object item, Description description) {
if(item instanceof HttpServletResponse) {
String value = ((HttpServletResponse) item).getHeader(name);
if(Objects.isNull(value)) {
description.appendText("did not have header ").appendValue("name");
} else {
description.appendText("header ").appendValue(name).appendText(" ");
valueMatcher.describeMismatch(value, description);
}
} else {
description.appendText("was not an HttpServletResponse");
}
}
};
}
public static InputStream istream(MockHttpServletResponse response) throws UnsupportedEncodingException {
return new ByteArrayInputStream( response.getContentAsString().getBytes() );
}
}