X-Git-Url: http://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Ftest%2Fjava%2Fde%2Fjuplo%2Ffacebook%2Ferrors%2FGraphApiExchangeFilterFunctionIntegrationTest.java;h=8614735036e8127e4ce31a85403c5691ff9f7bb4;hb=d870be7a05e5de616bb3c551d3270d4b2d1c9530;hp=a10066b016abfdcaf93d331ba2dea392a065b998;hpb=e3cbe5e272845110ebe7862bcb35bc9999c416fe;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 a10066b..8614735 100644 --- a/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java +++ b/src/test/java/de/juplo/facebook/errors/GraphApiExchangeFilterFunctionIntegrationTest.java @@ -3,7 +3,6 @@ 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; @@ -14,7 +13,9 @@ 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.ClientRequest; +import org.springframework.web.reactive.function.client.ClientResponse; +import org.springframework.web.reactive.function.client.ExchangeFunction; import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; @@ -42,7 +43,7 @@ public class GraphApiExchangeFilterFunctionIntegrationTest .builder() .clientConnector(new JettyClientHttpConnector()) .baseUrl(server.url("/").toString()) - .filter(GraphApiExchangeFilterFunction.INSTANCE) + .filter(this::errorHandlingFilter) .build(); } @@ -95,26 +96,15 @@ public class GraphApiExchangeFilterFunctionIntegrationTest @Test public void testTest() { - WebClient webClient = - WebClient - .builder() - .clientConnector(new JettyClientHttpConnector()) - .baseUrl(server.url("/").toString()) - .filter(ExchangeFilterFunction.ofResponseProcessor(response -> - { - List headerValues = response.headers().header("Foo"); - return headerValues.isEmpty() ? Mono.error( - new Exception("Response does not contain Foo header")) : - Mono.just(response); - })) - .build(); - server .enqueue(new MockResponse() + .setResponseCode(400) .setHeader("Content-Type", "text/plain") .setBody("Hello Spring!")); - Mono result = webClient.get() + Mono result; + + result = webClient.get() .uri("/greeting?name=Spring") .retrieve() .bodyToMono(String.class); @@ -122,5 +112,41 @@ public class GraphApiExchangeFilterFunctionIntegrationTest StepVerifier.create(result) .expectError(Exception.class) .verify(Duration.ofSeconds(3)); + + server + .enqueue(new MockResponse() + .setResponseCode(200) + .setHeader("Content-Type", "text/plain") + .setHeader("Foo", "Bar") + .setBody("Hello Spring!")); + + result = webClient.get() + .uri("/greeting?name=Spring") + .retrieve() + .bodyToMono(String.class); + + StepVerifier.create(result) + .expectNext("Hello Spring!") + .expectComplete() + .verify(Duration.ofSeconds(3)); + } + + public Mono errorHandlingFilter(ClientRequest request, ExchangeFunction next) + { + return + next + .exchange(request) + .flatMap(response -> + { + return + HttpStatus.Series.CLIENT_ERROR.equals(response.statusCode().series()) + ? response + .bodyToMono(String.class) + .flatMap(errorBody -> Mono.error(GraphApiException.create( + response.statusCode(), + response.headers().asHttpHeaders(), + errorBody.getBytes()))) + : Mono.just(response); + }); } }