@Override public void onResponse(final Call<T> call, final Response<T> response) { if (response.isSuccessful()) { complete(response.body()); } else { completeExceptionally(EXCEPTION_CONVERTER.apply(response)); } }
@Test public void exceptionInConvertFallbackedTest() { final ResponseBody responseBody = mock(ResponseBody.class); when(responseBody.source()).thenThrow(new RuntimeException()); final LineMessagingException result = target.apply(Response.error(401, responseBody)); assertThat(result) .isInstanceOf(GeneralLineMessagingException.class); }
@Test public void convertUnknownExceptionTest() { final ResponseBody responseBody = ResponseBody.create(MediaType.parse("application/json"), "{}"); final LineMessagingException result = target.apply(Response.error(999, responseBody)); assertThat(result) .isInstanceOf(GeneralLineMessagingException.class); }
@Test public void convertTest() { final ResponseBody responseBody = ResponseBody.create(MediaType.parse("application/json"), "{}"); final LineMessagingException result = target.apply(Response.error(401, responseBody)); assertThat(result) .isInstanceOf(UnauthorizedException.class); }
@Override public void onResponse(final Call<ResponseBody> call, final Response<ResponseBody> response) { if (!response.isSuccessful()) { completeExceptionally(EXCEPTION_CONVERTER.apply(response)); return; } try { complete(convert(response)); } catch (RuntimeException exceptionInConvert) { completeExceptionally( new GeneralLineMessagingException(exceptionInConvert.getMessage(), null, exceptionInConvert)); } }
@Test public void requestIdDeserializationTest() { final ResponseBody responseBody = ResponseBody.create(MediaType.parse("application/json"), "{\"message\":\"Invalid reply token\"}"); final okhttp3.Response rawResponse = new Builder() .code(400) .message("") .request(new Request.Builder().get().url("https://api.line.me/v2/bot/message/reply").build()) .addHeader("X-Line-Request-Id", "5ac44e02-e6be-49c3-a55f-6b2a29bc3aa4") .protocol(Protocol.HTTP_1_1) .build(); // Precondition assertThat(rawResponse.header("X-Line-Request-Id")).isEqualTo("5ac44e02-e6be-49c3-a55f-6b2a29bc3aa4"); // Do final LineMessagingException result = target.apply(Response.error(responseBody, rawResponse)); // Verify assertThat(result.getErrorResponse().getRequestId()).isEqualTo("5ac44e02-e6be-49c3-a55f-6b2a29bc3aa4"); } }