470af41942d66dd081dfbdcd14f73795defbfae5
[facebook-errors] / src / test / java / de / juplo / facebook / errors / GraphApiErrorResponseErrorHandlerIntegrationTest.java
1 package de.juplo.facebook.errors;
2
3
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;
18
19
20
21 /**
22  *
23  * @author Kai Moritz
24  */
25 public class GraphApiErrorResponseErrorHandlerIntegrationTest
26 {
27   private static final Logger LOG =
28       LoggerFactory.getLogger(GraphApiErrorResponseErrorHandlerIntegrationTest.class);
29
30   private MockWebServer server;
31   private String uri;
32   private RestTemplate clientTemplate;
33
34
35         @Before
36         public void setup()
37   {
38     server = new MockWebServer();
39     uri = server.url("/egal").toString();
40     clientTemplate = new RestTemplate();
41     clientTemplate.setErrorHandler(new GraphApiErrorResponseErrorHandler(clientTemplate.getErrorHandler()));
42         }
43
44         @After
45         public void shutdown() throws Exception
46   {
47     this.server.shutdown();
48         }
49
50
51   @Test
52   public void testNoError()
53   {
54 //    server
55 //        .enqueue(new MockResponse()
56 //            .setResponseCode(HttpStatus.CONTINUE.value())
57 //            .setHeader("Content-Type", "application/json")
58 //            .setBody("{ \"message\": \"Hello World!\" }"));
59 //
60 //    try
61 //    {
62 //      String result = clientTemplate.getForObject(uri, String.class);
63 //      assertEquals("{ \"message\": \"Hello World!\" }", result);
64 //    }
65 //    catch(Exception e)
66 //    {
67 //      LOG.debug("{}", e.toString());
68 //      fail("Unexpected error: " + e);
69 //    }
70
71
72     server
73         .enqueue(new MockResponse()
74             .setResponseCode(HttpStatus.OK.value())
75             .setHeader("Content-Type", "application/json")
76             .setBody("{ \"message\": \"Hello World!\" }"));
77
78     try
79     {
80       String result = clientTemplate.getForObject(uri, String.class);
81       assertEquals("{ \"message\": \"Hello World!\" }", result);
82     }
83     catch(Exception e)
84     {
85       LOG.debug("{}", e.toString());
86       fail("Unexpected error: " + e);
87     }
88
89
90     server
91         .enqueue(new MockResponse()
92             .setResponseCode(HttpStatus.TEMPORARY_REDIRECT.value())
93             .setHeader("Content-Type", "application/json")
94             .setBody("{ \"message\": \"Hello World!\" }"));
95
96     try
97     {
98       String result = clientTemplate.getForObject(uri, String.class);
99       assertEquals("{ \"message\": \"Hello World!\" }", result);
100     }
101     catch(Exception e)
102     {
103       LOG.debug("{}", e.toString());
104       fail("Unexpected error: " + e);
105     }
106
107
108     server
109         .enqueue(new MockResponse()
110             .setResponseCode(HttpStatus.BAD_REQUEST.value())
111             .setHeader("Content-Type", "application/json")
112             .setBody("{ \"message\": \"Hello World!\" }"));
113
114     try
115     {
116       clientTemplate.getForObject(uri, String.class);
117       fail("The parent handler should have raised an exception!");
118     }
119     catch(HttpClientErrorException e)
120     {
121       LOG.debug("Expexted error: {}", e.toString());
122     }
123     catch(Exception e)
124     {
125       LOG.debug("{}", e.toString());
126       fail("Unexpected error: " + e);
127     }
128
129
130     server
131         .enqueue(new MockResponse()
132             .setResponseCode(HttpStatus.INTERNAL_SERVER_ERROR.value())
133             .setHeader("Content-Type", "application/json")
134             .setBody("{ \"message\": \"Hello World!\" }"));
135
136     try
137     {
138       clientTemplate.getForObject(uri, String.class);
139       fail("The parent handler should have raised an exception!");
140     }
141     catch(HttpServerErrorException e)
142     {
143       LOG.debug("Expexted error: {}", e.toString());
144     }
145     catch(Exception e)
146     {
147       LOG.debug("{}", e.toString());
148       fail("Unexpected error: " + e);
149     }
150   }
151
152   @Test
153   public void testValidError()
154   {
155     server
156         .enqueue(new MockResponse()
157             .setResponseCode(HttpStatus.BAD_REQUEST.value())
158             .setHeader("Content-Type", "application/json")
159             .setBody(
160                 "{\n" +
161                 "  \"error\":\n" +
162                 "  {\n" +
163                 "    \"message\": \"(#613) Calls to stream have exceeded the rate of 600 calls per 600 seconds.\",\n" +
164                 "    \"type\": \"OAuthException\",\n" +
165                 "    \"code\": 613\n" +
166                 "  }\n" +
167                 "}"));
168
169     try
170     {
171       clientTemplate.getForObject(uri, String.class);
172       fail("The expected exception was not thrown");
173     }
174     catch(RateLimitExceededException e)
175     {
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());
180     }
181   }
182
183   @Test
184   public void testUnmappedError()
185   {
186     server
187         .enqueue(new MockResponse()
188             .setResponseCode(HttpStatus.BAD_REQUEST.value())
189             .setHeader("Content-Type", "application/json")
190             .setBody(
191         "{\n" +
192         "  \"error\":\n" +
193         "  {\n" +
194         "    \"message\": \"This error does not exist.\",\n" +
195         "    \"type\": \"NonexistentTypeException\",\n" +
196         "    \"code\": 999999999\n" +
197         "  }\n" +
198         "}"));
199
200     try
201     {
202       clientTemplate.getForObject(uri, String.class);
203       fail("The expected exception was not thrown");
204     }
205     catch(GraphApiException e)
206     {
207       LOG.debug("{}", e.toString());
208       assertEquals(new Integer(999999999), e.getCode());
209       assertEquals("This error does not exist.", e.getMessage());
210       try
211       {
212         Type type = e.getType();
213         LOG.error("unknown type: {}", type);
214         fail("unmapped type was resolved by enum: " + type);
215       }
216       catch (IllegalArgumentException ee) {}
217     }
218   }
219
220   @Test
221   public void testInvlalidError()
222   {
223     server
224         .enqueue(new MockResponse()
225             .setResponseCode(HttpStatus.BAD_REQUEST.value())
226             .setHeader("Content-Type", "application/json")
227             .setBody(
228         "{\n" +
229         "  \"error\":\n" +
230         "  {\n" +
231         "    \"message\": \"Not a Graph-Api-Exception.\",\n" +
232         "    \"type\": \"Whatever\",\n" +
233         "    \"code\": \"some string\"\n" +
234         "  }\n" +
235         "}"));
236
237     try
238     {
239       clientTemplate.getForObject(uri, String.class);
240       fail("The expected exception was not thrown");
241     }
242     catch(HttpClientErrorException e)
243     {
244       LOG.debug("{}", e.toString());
245     }
246     catch(Exception e)
247     {
248       fail("A wrong exception was thrown: " + e.toString());
249     }
250   }
251 }