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.WebClient;
18 import reactor.core.publisher.Mono;
19 import reactor.test.StepVerifier;
26 public class GraphApiExchangeFilterFunctionIntegrationTest
28 private static final Logger LOG =
29 LoggerFactory.getLogger(GraphApiExchangeFilterFunctionIntegrationTest.class);
31 private MockWebServer server;
32 private WebClient webClient;
38 server = new MockWebServer();
42 .clientConnector(new JettyClientHttpConnector())
43 .baseUrl(server.url("/").toString())
48 public void shutdown() throws Exception
50 this.server.shutdown();
55 public void testValidError()
58 .enqueue(new MockResponse()
59 .setResponseCode(HttpStatus.BAD_REQUEST.value())
60 .setHeader("Content-Type", "application/json")
65 " \"message\": \"(#613) Calls to stream have exceeded the rate of 600 calls per 600 seconds.\",\n" +
66 " \"type\": \"OAuthException\",\n" +
77 .onStatus(status -> status.is4xxClientError(), response -> GraphApiException.create(response))
78 .bodyToMono(String.class);
82 .expectErrorSatisfies(throwable ->
84 assertEquals(RateLimitExceededException.class, throwable.getClass());
85 RateLimitExceededException e = (RateLimitExceededException)throwable;
86 LOG.debug("{}", e.toString());
87 assertEquals(new Integer(613), e.getCode());
88 assertEquals("(#613) Calls to stream have exceeded the rate of 600 calls per 600 seconds.", e.getMessage());
89 assertEquals(Type.OAuthException, e.getType());
91 .verify(Duration.ofSeconds(3));
95 public void testTest()
100 .clientConnector(new JettyClientHttpConnector())
101 .baseUrl(server.url("/").toString())
102 .filter((request, next) -> next.exchange(request).flatMap(response ->
104 List<String> headerValues = response.headers().header("Foo");
105 return headerValues.isEmpty() ? Mono.error(GraphApiException.create(response).block()) :
111 .enqueue(new MockResponse()
112 .setResponseCode(400)
113 .setHeader("Content-Type", "text/plain")
114 .setBody("Hello Spring!"));
118 result = webClient.get()
119 .uri("/greeting?name=Spring")
121 .onStatus(status -> status.is4xxClientError(), response -> GraphApiException.create(response))
122 .bodyToMono(String.class);
124 StepVerifier.create(result)
125 .expectError(Exception.class)
126 .verify(Duration.ofSeconds(3));
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));