X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Ftest%2Fjava%2Fde%2Fjuplo%2Ffacebook%2Ferrors%2FGraphApiExchangeFilterFunctionIntegrationTest.java;h=53b2e6a31628957662ae6b7a9a296c07c10fe399;hb=2ee955aa31aac3dff18457f032fce4ed15049cd2;hp=b90e0577a07847dc6481c15879dd111d9159a1b6;hpb=856a32e22b7a0e383c0ea2cf8ad3885ac9f08e36;p=facebook-errors diff --git a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java index b90e057..53b2e6a 100644 --- a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java +++ b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java @@ -2,20 +2,20 @@ package de.juplo.facebook.errors; import de.juplo.facebook.errors.GraphApiException.Type; -import java.time.Duration; -import java.util.List; import okhttp3.mockwebserver.MockResponse; import okhttp3.mockwebserver.MockWebServer; import org.junit.After; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; import org.springframework.http.client.reactive.JettyClientHttpConnector; -import org.springframework.web.reactive.function.client.ExchangeFilterFunction; import org.springframework.web.reactive.function.client.WebClient; +import org.springframework.web.reactive.function.client.WebClientResponseException.BadRequest; +import org.springframework.web.reactive.function.client.WebClientResponseException.InternalServerError; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; @@ -42,7 +42,7 @@ public class GraphApiExchangeFilterFunctionIntegrationTest .builder() .clientConnector(new JettyClientHttpConnector()) .baseUrl(server.url("/").toString()) - .filter(GraphApiExchangeFilterFunction.INSTANCE) + .filter(new GraphApiExchangeFilterFunction()) .build(); } @@ -53,6 +53,97 @@ public class GraphApiExchangeFilterFunctionIntegrationTest } + @Test + public void testNoError() + { + Mono result; + + + //server + // .enqueue(new MockResponse() + // .setResponseCode(HttpStatus.CONTINUE.value()) + // .setHeader("Content-Type", "application/json") + // .setBody("Hallo Welt!")); + // + //result = + // webClient + // .get() + // .uri("/egal") + // .retrieve() + // .bodyToMono(String.class); + // + //StepVerifier + // .create(result) + // .expectNext("Hallo Welt!") + // .expectComplete() + // .verify(); + + + server + .enqueue(new MockResponse() + .setResponseCode(HttpStatus.OK.value()) + .setHeader("Content-Type", "text/plain") + .setBody("Hallo Welt!")); + + result = + webClient + .get() + .uri("/egal") + .retrieve() + .bodyToMono(String.class); + + StepVerifier + .create(result) + .expectNext("Hallo Welt!") + .expectComplete() + .verify(); + + + server + .enqueue(new MockResponse() + .setResponseCode(HttpStatus.TEMPORARY_REDIRECT.value()) + .setHeader("Location", server.url("/woanders")) + .setHeader("Content-Type", "text/plain") + .setBody("Jetzt doch woanders...")); + server + .enqueue(new MockResponse() + .setResponseCode(HttpStatus.OK.value()) + .setHeader("Content-Type", "text/plain") + .setBody("Hallo Welt!")); + + result = + webClient + .get() + .uri("/egal") + .retrieve() + .bodyToMono(String.class); + + StepVerifier + .create(result) + .expectNext("Hallo Welt!") + .expectComplete() + .verify(); + + + server + .enqueue(new MockResponse() + .setResponseCode(HttpStatus.INTERNAL_SERVER_ERROR.value()) + .setHeader("Content-Type", "text/plain") + .setBody("Hallo Welt!")); + + result = + webClient + .get() + .uri("/egal") + .retrieve() + .bodyToMono(String.class); + + StepVerifier + .create(result) + .expectError(InternalServerError.class) + .verify(); + } + @Test public void testValidError() { @@ -70,6 +161,42 @@ public class GraphApiExchangeFilterFunctionIntegrationTest " }\n" + "}")); + Mono result = + webClient + .get() + .uri("/egal") + .retrieve() + .bodyToMono(String.class); + + StepVerifier.create(result).expectErrorSatisfies(throwable -> + { + assertEquals(RateLimitExceededException.class, throwable.getClass()); + RateLimitExceededException e = (RateLimitExceededException)throwable; + LOG.debug("{}", e.toString()); + assertEquals(new Integer(613), e.getCode()); + assertEquals("(#613) Calls to stream have exceeded the rate of 600 calls per 600 seconds.", e.getMessage()); + assertEquals(Type.OAuthException, e.getType()); + }) + .verify(); + } + + @Test + public void testUnmappedError() + { + server + .enqueue(new MockResponse() + .setResponseCode(HttpStatus.BAD_REQUEST.value()) + .setHeader("Content-Type", "application/json") + .setBody( + "{\n" + + " \"error\":\n" + + " {\n" + + " \"message\": \"This error does not exist.\",\n" + + " \"type\": \"NonexistentTypeException\",\n" + + " \"code\": 999999999\n" + + " }\n" + + "}")); + Mono result = webClient @@ -78,68 +205,67 @@ public class GraphApiExchangeFilterFunctionIntegrationTest .retrieve() .bodyToMono(String.class); - StepVerifier - .create(result) - .expectErrorSatisfies(throwable -> - { - assertEquals(RateLimitExceededException.class, throwable.getClass()); - RateLimitExceededException e = (RateLimitExceededException)throwable; - LOG.debug("{}", e.toString()); - assertEquals(new Integer(613), e.getCode()); - assertEquals("(#613) Calls to stream have exceeded the rate of 600 calls per 600 seconds.", e.getMessage()); - assertEquals(Type.OAuthException, e.getType()); - }) - .verify(Duration.ofSeconds(3)); + StepVerifier.create(result).expectErrorSatisfies(throwable -> + { + assertEquals(UnmappedErrorException.class, throwable.getClass()); + UnmappedErrorException e = (UnmappedErrorException)throwable; + LOG.debug("{}", e.toString()); + assertEquals(new Integer(999999999), e.getCode()); + assertEquals("This error does not exist.", e.getMessage()); + try + { + Type type = e.getType(); + LOG.error("unknown type: {}", type); + fail("unmapped type was resolved by enum: " + type); + } + catch (IllegalArgumentException ee) {} + }) + .verify(); } @Test - public void testTest() + public void testInvlalidError() { - WebClient webClient = - WebClient - .builder() - .clientConnector(new JettyClientHttpConnector()) - .baseUrl(server.url("/").toString()) - .filter((request, next) -> next.exchange(request).flatMap(response -> - { - List headerValues = response.headers().header("Foo"); - return headerValues.isEmpty() ? Mono.error(GraphApiException.create(response).block()) : - Mono.just(response); - })) - .build(); + Mono result; + server .enqueue(new MockResponse() - .setResponseCode(200) - .setHeader("Content-Type", "text/plain") - .setBody("Hello Spring!")); + .setResponseCode(HttpStatus.BAD_REQUEST.value()) + .setHeader("Content-Type", "application/json") + .setBody( + "{\n" + + " \"error\":\n" + + " {\n" + + " \"message\": \"Not a Graph-Api-Exception.\",\n" + + " \"type\": \"Whatever\",\n" + + " \"code\": \"some string\"\n" + + " }\n" + + "}")); - Mono result; + result = + webClient + .get() + .uri("/egal") + .retrieve() + .bodyToMono(String.class); - result = webClient.get() - .uri("/greeting?name=Spring") - .retrieve() - .bodyToMono(String.class); + StepVerifier.create(result).expectError(BadRequest.class).verify(); - StepVerifier.create(result) - .expectError(Exception.class) - .verify(Duration.ofSeconds(3)); server .enqueue(new MockResponse() - .setResponseCode(200) + .setResponseCode(HttpStatus.BAD_REQUEST.value()) .setHeader("Content-Type", "text/plain") - .setHeader("Foo", "Bar") - .setBody("Hello Spring!")); + .setBody("Hallo Welt!")); - result = webClient.get() - .uri("/greeting?name=Spring") - .retrieve() - .bodyToMono(String.class); + result = + webClient + .get() + .uri("/egal") + .retrieve() + .bodyToMono(String.class); - StepVerifier.create(result) - .expectNext("Hello Spring!") - .expectComplete() - .verify(Duration.ofSeconds(3)); + StepVerifier.create(result).expectError(BadRequest.class).verify(); } }