{
@Override
public Object answer(InvocationOnMock invocation) throws Throwable
{
Object[] args = invocation.getArguments();
FilterResponseContext context = (FilterResponseContext) args[1];
// Verify incoming data.
assertEquals(HttpStatus.S_200_OK, context.getHttpStatus());
assertEquals(headersFromApp, context.getResponseHeaders());
assertEquals(entityFromApp, context.getResponseData().getEntityResponse());
// Modify data in filter.
context.setHttpStatus(HttpStatus.S_400_BAD_REQUEST);
context.getResponseData().setEntityResponse(entityFromFilter1);
context.getResponseHeaders().clear();
return null;
}
}).doAnswer(new Answer<Object>()
// Mock the behavior of the first filter.
{
@Override
public Object answer(InvocationOnMock invocation) throws Throwable
{
Object[] args = invocation.getArguments();
FilterResponseContext context = (FilterResponseContext) args[1];
// Verify incoming data.
assertEquals(HttpStatus.S_400_BAD_REQUEST, context.getHttpStatus());
assertTrue(context.getResponseHeaders().isEmpty());
assertEquals(context.getResponseData().getEntityResponse(), entityFromFilter1);
// Modify data in filter.
context.setHttpStatus(HttpStatus.S_403_FORBIDDEN);
context.getResponseData().setEntityResponse(entityFromFilter2);
context.getResponseHeaders().putAll(headersFromFilters);
return null;
}
}).when(_filter).onResponse(eq(_filterRequestContext), any(FilterResponseContext.class));
RestResponse restResponse = new RestResponseBuilder().build();