1 package de.juplo.facebook.errors;
4 import de.juplo.facebook.errors.GraphApiException.Type;
5 import java.time.Duration;
7 import okhttp3.mockwebserver.MockResponse;
8 import okhttp3.mockwebserver.MockWebServer;
9 import org.junit.After;
10 import static org.junit.Assert.assertEquals;
11 import org.junit.Before;
12 import org.junit.Test;
13 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory;
15 import org.springframework.http.HttpStatus;
16 import org.springframework.http.client.reactive.JettyClientHttpConnector;
17 import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
18 import org.springframework.web.reactive.function.client.WebClient;
19 import reactor.core.publisher.Mono;
20 import reactor.test.StepVerifier;
27 public class GraphApiExchangeFilterFunctionIntegrationTest
29 private static final Logger LOG =
30 LoggerFactory.getLogger(GraphApiExchangeFilterFunctionIntegrationTest.class);
32 private MockWebServer server;
33 private WebClient webClient;
39 server = new MockWebServer();
43 .clientConnector(new JettyClientHttpConnector())
44 .baseUrl(server.url("/").toString())
45 .filter(GraphApiExchangeFilterFunction.INSTANCE)
50 public void shutdown() throws Exception
52 this.server.shutdown();
57 public void testValidError()
60 .enqueue(new MockResponse()
61 .setResponseCode(HttpStatus.BAD_REQUEST.value())
62 .setHeader("Content-Type", "application/json")
67 " \"message\": \"(#613) Calls to stream have exceeded the rate of 600 calls per 600 seconds.\",\n" +
68 " \"type\": \"OAuthException\",\n" +
79 .bodyToMono(String.class);
83 .expectErrorSatisfies(throwable ->
85 assertEquals(RateLimitExceededException.class, throwable.getClass());
86 RateLimitExceededException e = (RateLimitExceededException)throwable;
87 LOG.debug("{}", e.toString());
88 assertEquals(new Integer(613), e.getCode());
89 assertEquals("(#613) Calls to stream have exceeded the rate of 600 calls per 600 seconds.", e.getMessage());
90 assertEquals(Type.OAuthException, e.getType());
92 .verify(Duration.ofSeconds(3));
96 public void testTest()
101 .clientConnector(new JettyClientHttpConnector())
102 .baseUrl(server.url("/").toString())
103 .filter((request, next) -> next.exchange(request).flatMap(response ->
105 List<String> headerValues = response.headers().header("Foo");
106 return headerValues.isEmpty() ? Mono.error(GraphApiException.create(response)) :
112 .enqueue(new MockResponse()
113 .setResponseCode(200)
114 .setHeader("Content-Type", "text/plain")
115 .setBody("Hello Spring!"));
119 result = webClient.get()
120 .uri("/greeting?name=Spring")
122 .bodyToMono(String.class);
124 StepVerifier.create(result)
125 .expectError(Exception.class)
126 .verify(Duration.ofSeconds(90));
129 .enqueue(new MockResponse()
130 .setResponseCode(200)
131 .setHeader("Content-Type", "text/plain")
132 .setHeader("Foo", "Bar")
133 .setBody("Hello Spring!"));
135 result = webClient.get()
136 .uri("/greeting?name=Spring")
138 .bodyToMono(String.class);
140 StepVerifier.create(result)
141 .expectNext("Hello Spring!")
143 .verify(Duration.ofSeconds(3));