Clearified intend in GraphApiErrorResponseErrorHandlerIntegrationTest
[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("Hallo Welt!"));
59     //
60     //try
61     //{
62     //  String result = clientTemplate.getForObject(uri, String.class);
63     //  assertEquals("Hallo Welt!", 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", "text/plain")
76             .setBody("Hallo Welt!"));
77
78     try
79     {
80       String result = clientTemplate.getForObject(uri, String.class);
81       assertEquals("Hallo Welt!", 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", "text/plain")
94             .setBody("Hallo Welt!"));
95
96     try
97     {
98       String result = clientTemplate.getForObject(uri, String.class);
99       assertEquals("Hallo Welt!", 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.INTERNAL_SERVER_ERROR.value())
111             .setHeader("Content-Type", "text/plain")
112             .setBody("Hallo Welt!"));
113
114     try
115     {
116       clientTemplate.getForObject(uri, String.class);
117       fail("The parent handler should have raised an exception!");
118     }
119     catch(HttpServerErrorException 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   @Test
131   public void testValidError()
132   {
133     server
134         .enqueue(new MockResponse()
135             .setResponseCode(HttpStatus.BAD_REQUEST.value())
136             .setHeader("Content-Type", "application/json")
137             .setBody(
138                 "{\n" +
139                 "  \"error\":\n" +
140                 "  {\n" +
141                 "    \"message\": \"(#613) Calls to stream have exceeded the rate of 600 calls per 600 seconds.\",\n" +
142                 "    \"type\": \"OAuthException\",\n" +
143                 "    \"code\": 613\n" +
144                 "  }\n" +
145                 "}"));
146
147     try
148     {
149       clientTemplate.getForObject(uri, String.class);
150       fail("The expected exception was not thrown");
151     }
152     catch(RateLimitExceededException e)
153     {
154       LOG.debug("{}", e.toString());
155       assertEquals(new Integer(613), e.getCode());
156       assertEquals("(#613) Calls to stream have exceeded the rate of 600 calls per 600 seconds.", e.getMessage());
157       assertEquals(Type.OAuthException, e.getType());
158     }
159   }
160
161   @Test
162   public void testUnmappedError()
163   {
164     server
165         .enqueue(new MockResponse()
166             .setResponseCode(HttpStatus.BAD_REQUEST.value())
167             .setHeader("Content-Type", "application/json")
168             .setBody(
169                 "{\n" +
170                 "  \"error\":\n" +
171                 "  {\n" +
172                 "    \"message\": \"This error does not exist.\",\n" +
173                 "    \"type\": \"NonexistentTypeException\",\n" +
174                 "    \"code\": 999999999\n" +
175                 "  }\n" +
176                 "}"));
177
178     try
179     {
180       clientTemplate.getForObject(uri, String.class);
181       fail("The expected exception was not thrown");
182     }
183     catch(GraphApiException e)
184     {
185       LOG.debug("{}", e.toString());
186       assertEquals(new Integer(999999999), e.getCode());
187       assertEquals("This error does not exist.", e.getMessage());
188       try
189       {
190         Type type = e.getType();
191         LOG.error("unknown type: {}", type);
192         fail("unmapped type was resolved by enum: " + type);
193       }
194       catch (IllegalArgumentException ee) {}
195     }
196   }
197
198   @Test
199   public void testInvlalidError()
200   {
201     server
202         .enqueue(new MockResponse()
203             .setResponseCode(HttpStatus.BAD_REQUEST.value())
204             .setHeader("Content-Type", "application/json")
205             .setBody(
206                 "{\n" +
207                 "  \"error\":\n" +
208                 "  {\n" +
209                 "    \"message\": \"Not a Graph-Api-Exception.\",\n" +
210                 "    \"type\": \"Whatever\",\n" +
211                 "    \"code\": \"some string\"\n" +
212                 "  }\n" +
213                 "}"));
214
215     try
216     {
217       clientTemplate.getForObject(uri, String.class);
218       fail("The parent handler should have raised an exception!");
219     }
220     catch(HttpClientErrorException e)
221     {
222       LOG.debug("Expexted error: {}", e.toString());
223     }
224     catch(Exception e)
225     {
226       LOG.debug("{}", e.toString());
227       fail("Unexpected error: " + e);
228     }
229
230
231     server
232         .enqueue(new MockResponse()
233             .setResponseCode(HttpStatus.BAD_REQUEST.value())
234             .setHeader("Content-Type", "text/plain")
235             .setBody("Hallo Welt!"));
236
237     try
238     {
239       clientTemplate.getForObject(uri, String.class);
240       fail("The parent handler should have raised an exception!");
241     }
242     catch(HttpClientErrorException e)
243     {
244       LOG.debug("Expexted error: {}", e.toString());
245     }
246     catch(Exception e)
247     {
248       LOG.debug("{}", e.toString());
249       fail("Unexpected error: " + e);
250     }
251   }
252 }