1 package de.juplo.facebook.errors;
4 import de.juplo.facebook.errors.GraphApiException.Type;
5 import okhttp3.mockwebserver.MockResponse;
6 import okhttp3.mockwebserver.MockWebServer;
7 import org.junit.After;
8 import static org.junit.Assert.assertEquals;
9 import static org.junit.Assert.fail;
10 import org.junit.Before;
11 import org.junit.Test;
12 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory;
14 import org.springframework.http.HttpStatus;
15 import org.springframework.web.client.HttpClientErrorException;
16 import org.springframework.web.client.HttpServerErrorException;
17 import org.springframework.web.client.RestTemplate;
25 public class GraphApiErrorResponseErrorHandlerIntegrationTest
27 private static final Logger LOG =
28 LoggerFactory.getLogger(GraphApiErrorResponseErrorHandlerIntegrationTest.class);
30 private MockWebServer server;
32 private RestTemplate clientTemplate;
38 server = new MockWebServer();
39 uri = server.url("/egal").toString();
40 clientTemplate = new RestTemplate();
41 clientTemplate.setErrorHandler(new GraphApiErrorResponseErrorHandler(clientTemplate.getErrorHandler()));
45 public void shutdown() throws Exception
47 this.server.shutdown();
52 public void testNoError()
55 .enqueue(new MockResponse()
56 .setResponseCode(HttpStatus.CONTINUE.value())
57 .setHeader("Content-Type", "application/json")
58 .setBody("{ \"message\": \"Hello World!\" }"));
62 SimpleMessage result = clientTemplate.getForObject(uri, SimpleMessage.class);
63 assertEquals("Hello World!", result.message);
67 LOG.debug("{}", e.toString());
68 fail("Unexpected error: " + e);
73 .enqueue(new MockResponse()
74 .setResponseCode(HttpStatus.OK.value())
75 .setHeader("Content-Type", "application/json")
76 .setBody("{ \"message\": \"Hello World!\" }"));
80 SimpleMessage result = clientTemplate.getForObject(uri, SimpleMessage.class);
81 assertEquals("Hello World!", result.message);
85 LOG.debug("{}", e.toString());
86 fail("Unexpected error: " + e);
91 .enqueue(new MockResponse()
92 .setResponseCode(HttpStatus.TEMPORARY_REDIRECT.value())
93 .setHeader("Content-Type", "application/json")
94 .setBody("{ \"message\": \"Hello World!\" }"));
98 SimpleMessage result = clientTemplate.getForObject(uri, SimpleMessage.class);
99 assertEquals("Hello World!", result.message);
103 LOG.debug("{}", e.toString());
104 fail("Unexpected error: " + e);
109 .enqueue(new MockResponse()
110 .setResponseCode(HttpStatus.BAD_REQUEST.value())
111 .setHeader("Content-Type", "application/json")
112 .setBody("{ \"message\": \"Hello World!\" }"));
116 clientTemplate.getForObject(uri, SimpleMessage.class);
117 fail("The parent handler should have raised an exception!");
119 catch(HttpClientErrorException e)
121 LOG.debug("Expexted error: {}", e.toString());
125 LOG.debug("{}", e.toString());
126 fail("Unexpected error: " + e);
131 .enqueue(new MockResponse()
132 .setResponseCode(HttpStatus.INTERNAL_SERVER_ERROR.value())
133 .setHeader("Content-Type", "application/json")
134 .setBody("{ \"message\": \"Hello World!\" }"));
138 clientTemplate.getForObject(uri, SimpleMessage.class);
139 fail("The parent handler should have raised an exception!");
141 catch(HttpServerErrorException e)
143 LOG.debug("Expexted error: {}", e.toString());
147 LOG.debug("{}", e.toString());
148 fail("Unexpected error: " + e);
153 public void testValidError()
156 .enqueue(new MockResponse()
157 .setResponseCode(HttpStatus.BAD_REQUEST.value())
158 .setHeader("Content-Type", "application/json")
163 " \"message\": \"(#613) Calls to stream have exceeded the rate of 600 calls per 600 seconds.\",\n" +
164 " \"type\": \"OAuthException\",\n" +
171 clientTemplate.getForObject(uri, SimpleMessage.class);
172 fail("The expected exception was not thrown");
174 catch(RateLimitExceededException e)
176 LOG.debug("{}", e.toString());
177 assertEquals(new Integer(613), e.getCode());
178 assertEquals("(#613) Calls to stream have exceeded the rate of 600 calls per 600 seconds.", e.getMessage());
179 assertEquals(Type.OAuthException, e.getType());
184 public void testUnmappedError()
187 .enqueue(new MockResponse()
188 .setResponseCode(HttpStatus.BAD_REQUEST.value())
189 .setHeader("Content-Type", "application/json")
194 " \"message\": \"This error does not exist.\",\n" +
195 " \"type\": \"NonexistentTypeException\",\n" +
196 " \"code\": 999999999\n" +
202 clientTemplate.getForObject(uri, SimpleMessage.class);
203 fail("The expected exception was not thrown");
205 catch(GraphApiException e)
207 LOG.debug("{}", e.toString());
208 assertEquals(new Integer(999999999), e.getCode());
209 assertEquals("This error does not exist.", e.getMessage());
212 Type type = e.getType();
213 LOG.error("unknown type: {}", type);
214 fail("unmapped type was resolved by enum: " + type);
216 catch (IllegalArgumentException ee) {}
221 public void testInvlalidError()
224 .enqueue(new MockResponse()
225 .setResponseCode(HttpStatus.BAD_REQUEST.value())
226 .setHeader("Content-Type", "application/json")
231 " \"message\": \"Not a Graph-Api-Exception.\",\n" +
232 " \"type\": \"Whatever\",\n" +
233 " \"code\": \"some string\"\n" +
239 clientTemplate.getForObject(uri, SimpleMessage.class);
240 fail("The expected exception was not thrown");
242 catch(HttpClientErrorException e)
244 LOG.debug("{}", e.toString());
248 fail("A wrong exception was thrown: " + e.toString());
253 static class SimpleMessage