package com.opower.rest.client.generator.extractors; import com.google.common.collect.ImmutableList; import com.opower.rest.client.generator.core.BaseClientResponse; import com.opower.rest.client.generator.core.ClientErrorInterceptor; import com.opower.rest.client.generator.core.ClientResponse; import com.opower.rest.client.generator.core.ClientResponseFailure; import com.opower.rest.client.generator.util.HttpResponseCodes; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import java.lang.reflect.Method; import static org.easymock.EasyMock.*; /** * @author chris.phillips */ public class TestClientErrorHandler { @Rule public ExpectedException thrown = ExpectedException.none(); private final Method method = this.getClass().getMethods()[0]; /** * ClientResponseFailures should be passed on to the ClientErrorInterceptor chain. The chain in this test * will translate the ClientResponseFailure into an ExceptionFromHandler instance. */ @Test public void clientResponseFailuresAreIntercepted() { thrown.expect(ExceptionFromHandler.class); ClientErrorInterceptor mockInterceptor = createMock(ClientErrorInterceptor.class); mockInterceptor.handle(anyObject(ClientResponse.class)); expectLastCall().andThrow(new ExceptionFromHandler()); BaseClientResponse.BaseClientResponseStreamFactory streamFactory = createMock(BaseClientResponse.BaseClientResponseStreamFactory.class); ClientErrorHandler errorHandler = new DefaultClientErrorHandler(ImmutableList.of(mockInterceptor)); BaseClientResponse mockResponse = createMock(BaseClientResponse.class); expect(mockResponse.getStreamFactory()).andReturn(streamFactory); replay(mockInterceptor, mockResponse); errorHandler.clientErrorHandling(method, mockResponse, createMock(ClientResponseFailure.class)); } /** * Exceptions that are not of type ClientResponseFailure should just be rethrown. They don't indicate an * error response from the server, but an error trying to parse the response from the server (error response or otherwise) * */ @Test public void nonClientResponseFailuresAreReThrown() { thrown.expect(UnhandledException.class); ClientErrorHandler errorHandler = new DefaultClientErrorHandler(ImmutableList.<ClientErrorInterceptor>of()); BaseClientResponse mockResponse = createMock(BaseClientResponse.class); expect(mockResponse.getStatus()).andReturn(HttpResponseCodes.SC_OK); replay(mockResponse); errorHandler.clientErrorHandling(method, mockResponse, new UnhandledException()); } private class ExceptionFromHandler extends RuntimeException {} private class UnhandledException extends RuntimeException {} }