1 package de.juplo.facebook.errors;
4 import java.time.Duration;
6 import okhttp3.mockwebserver.MockResponse;
7 import okhttp3.mockwebserver.MockWebServer;
8 import org.junit.After;
9 import org.junit.Assert;
10 import org.junit.Before;
11 import org.junit.Test;
12 import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
13 import org.springframework.web.reactive.function.client.WebClient;
14 import reactor.core.publisher.Mono;
21 public class GraphApiExchangeFilterFunctionIntegrationTest
23 private MockWebServer server;
25 private WebClient webClient;
30 this.server = new MockWebServer();
31 String baseUrl = this.server.url("/").toString();
32 this.webClient = WebClient.create(baseUrl);
36 public void shutdown() throws Exception {
37 this.server.shutdown();
42 public void errorHandlingFilter() throws Exception
45 ExchangeFilterFunction filter = ExchangeFilterFunction.ofResponseProcessor(
48 List<String> headerValues = clientResponse.headers().header("Foo");
49 return headerValues.isEmpty() ? Mono.error(
50 new MyException("Response does not contain Foo header")) : Mono.just(
55 WebClient filteredClient = this.webClient.filter(filter);
58 this.server.enqueue(new MockResponse().setHeader("Content-Type",
59 "text/plain").setBody("Hello Spring!"));
61 Mono<String> result = filteredClient.get()
62 .uri("/greeting?name=Spring")
64 .bodyToMono(String.class);
66 StepVerifier.create(result)
67 .expectError(MyException.class)
68 .verify(Duration.ofSeconds(3));
71 this.server.enqueue(new MockResponse().setHeader("Content-Type",
73 .setHeader("Foo", "Bar")
74 .setBody("Hello Spring!"));
76 result = filteredClient.get()
77 .uri("/greeting?name=Spring")
79 .bodyToMono(String.class);
81 StepVerifier.create(result)
82 .expectNext("Hello Spring!")
84 .verify(Duration.ofSeconds(3));
86 Assert.assertEquals(2, server.getRequestCount());