package org.springframework.data.rest.webmvc;
import org.hamcrest.BaseMatcher;
import org.hamcrest.Description;
import org.springframework.http.HttpEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.util.Assert;
/**
* @author Jon Brisbin
*/
class HttpEntityMatcher<T> extends BaseMatcher<HttpEntity<T>> {
private final HttpEntity<T> expected;
public HttpEntityMatcher(HttpEntity<T> expected) {
Assert.notNull(expected, "HttpEntity cannot be null");
this.expected = expected;
}
public static <T> HttpEntityMatcher<T> httpEntity(HttpEntity<T> httpEntity) {
return new HttpEntityMatcher<T>(httpEntity);
}
@Override
public boolean matches(Object item) {
if (!(item instanceof HttpEntity)) {
return false;
}
if (item instanceof ResponseEntity && expected instanceof ResponseEntity) {
ResponseEntity<?> left = (ResponseEntity<?>) expected;
ResponseEntity<?> right = (ResponseEntity<?>) item;
if (!left.getStatusCode().equals(right.getStatusCode())) {
return false;
}
}
HttpEntity<?> left = expected;
HttpEntity<?> right = (HttpEntity<?>) item;
return left.getBody().equals(right.getBody()) && left.getHeaders().equals(right.getHeaders());
}
@Override
public void describeTo(Description description) {
description.appendText(expected.toString());
}
}