WIP: WebClient
[facebook-errors] / src / test / java / de / juplo / facebook / errors / GraphApiExchangeFilterFunctionIntegrationTest.java
1 package de.juplo.facebook.errors;
2
3
4 import java.time.Duration;
5 import java.util.List;
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;
15
16
17 /**
18  *
19  * @author Kai Moritz
20  */
21 public class GraphApiExchangeFilterFunctionIntegrationTest
22 {
23         private MockWebServer server;
24
25         private WebClient webClient;
26
27
28         @Before
29         public void setup() {
30                 this.server = new MockWebServer();
31                 String baseUrl = this.server.url("/").toString();
32                 this.webClient = WebClient.create(baseUrl);
33         }
34
35         @After
36         public void shutdown() throws Exception {
37                 this.server.shutdown();
38         }
39
40
41   @Test
42   public void errorHandlingFilter() throws Exception
43   {
44
45     ExchangeFilterFunction filter = ExchangeFilterFunction.ofResponseProcessor(
46         clientResponse ->
47     {
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(
51               clientResponse);
52     }
53     );
54
55     WebClient filteredClient = this.webClient.filter(filter);
56
57     // header not present
58     this.server.enqueue(new MockResponse().setHeader("Content-Type",
59         "text/plain").setBody("Hello Spring!"));
60
61     Mono<String> result = filteredClient.get()
62         .uri("/greeting?name=Spring")
63         .retrieve()
64         .bodyToMono(String.class);
65
66     StepVerifier.create(result)
67         .expectError(MyException.class)
68         .verify(Duration.ofSeconds(3));
69
70     // header present
71     this.server.enqueue(new MockResponse().setHeader("Content-Type",
72         "text/plain")
73         .setHeader("Foo", "Bar")
74         .setBody("Hello Spring!"));
75
76     result = filteredClient.get()
77         .uri("/greeting?name=Spring")
78         .retrieve()
79         .bodyToMono(String.class);
80
81     StepVerifier.create(result)
82         .expectNext("Hello Spring!")
83         .expectComplete()
84         .verify(Duration.ofSeconds(3));
85
86     Assert.assertEquals(2, server.getRequestCount());
87   }
88 }