View Javadoc

1   package it.com.atlassian.rest.common;
2   
3   import javax.ws.rs.core.MediaType;
4   
5   import com.atlassian.rest.jersey.client.WebResourceFactory;
6   
7   import com.sun.jersey.api.client.ClientResponse;
8   import com.sun.jersey.api.client.UniformInterfaceException;
9   import com.sun.jersey.api.client.WebResource;
10  
11  import org.junit.Test;
12  
13  import static org.junit.Assert.assertEquals;
14  import static org.junit.Assert.fail;
15  
16  public class ExceptionMapperTest {
17      WebResource anonymousWebResource = WebResourceFactory.anonymous().path("/");
18  
19      ClientResponse getSecurityFailureResponseFromPartialBuilder(WebResource.Builder builder) {
20          try {
21              builder.get(String.class);
22              fail();
23              throw new RuntimeException("Shouldn't happen after a fail()");
24          } catch (UniformInterfaceException e) {
25              return e.getResponse();
26          }
27      }
28  
29      private static void assertResponseIs(ClientResponse resp, ClientResponse.Status expectedStatus, MediaType expectedType) {
30          assertEquals(expectedStatus, resp.getClientResponseStatus());
31          assertEquals(expectedType, resp.getType());
32      }
33  
34      @Test
35      public void unauthorisedErrorsAreSentAsXmlByDefault() {
36          ClientResponse resp = getSecurityFailureResponseFromPartialBuilder(anonymousWebResource.type("text/plain"));
37          assertResponseIs(resp, ClientResponse.Status.UNAUTHORIZED, MediaType.APPLICATION_XML_TYPE);
38      }
39  
40      @Test
41      public void unauthorisedErrorsAreSentAsXmlWhenAnythingIsAccepted() {
42          ClientResponse resp = getSecurityFailureResponseFromPartialBuilder(anonymousWebResource.accept("*/*"));
43          assertResponseIs(resp, ClientResponse.Status.UNAUTHORIZED, MediaType.APPLICATION_XML_TYPE);
44      }
45  
46      @Test
47      public void unauthorisedErrorsAreSentAsXmlWhenRequested() {
48          ClientResponse resp = getSecurityFailureResponseFromPartialBuilder(anonymousWebResource.accept(MediaType.APPLICATION_XML_TYPE));
49          assertResponseIs(resp, ClientResponse.Status.UNAUTHORIZED, MediaType.APPLICATION_XML_TYPE);
50      }
51  
52      @Test
53      public void unauthorisedErrorsAreSentAsJsonWhenRequested() {
54          ClientResponse resp = getSecurityFailureResponseFromPartialBuilder(anonymousWebResource.accept(MediaType.APPLICATION_JSON_TYPE));
55          assertResponseIs(resp, ClientResponse.Status.UNAUTHORIZED, MediaType.APPLICATION_JSON_TYPE);
56      }
57  
58      private static WebResource uncaughtErrorResource() {
59          return WebResourceFactory.anonymous().path("errors/uncaughtInternalError");
60      }
61  
62      @Test
63      public void uncaughtExceptionSentAsXmlByDefault() {
64          assertResponseIs(
65                  uncaughtErrorResource().get(ClientResponse.class),
66                  ClientResponse.Status.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_XML_TYPE);
67      }
68  
69      @Test
70      public void uncaughtExceptionSentAsXmlWhenAnythingIsAccepted() {
71          assertResponseIs(
72                  uncaughtErrorResource().accept("*/*").get(ClientResponse.class),
73                  ClientResponse.Status.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_XML_TYPE);
74      }
75  
76      @Test
77      public void uncaughtExceptionSentAsXmlWhenRequested() {
78          assertResponseIs(
79                  uncaughtErrorResource().accept(MediaType.APPLICATION_XML_TYPE).get(ClientResponse.class),
80                  ClientResponse.Status.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_XML_TYPE);
81      }
82  
83      @Test
84      public void uncaughtExceptionSentAsJsonWhenRequested() {
85          assertResponseIs(
86                  uncaughtErrorResource().accept(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class),
87                  ClientResponse.Status.INTERNAL_SERVER_ERROR, MediaType.APPLICATION_JSON_TYPE);
88      }
89  
90      private static WebResource notFound() {
91          return WebResourceFactory.authenticated().path("somepaththatdoesntexist");
92      }
93  
94      @Test
95      public void notFoundErrorsAreSentAsXmlByDefault() {
96          ClientResponse resp = getSecurityFailureResponseFromPartialBuilder(notFound().type("text/plain"));
97          assertResponseIs(resp, ClientResponse.Status.NOT_FOUND, MediaType.APPLICATION_XML_TYPE);
98      }
99  
100     @Test
101     public void notFoundErrorsAreSentAsXmlWhenAnythingIsAccepted() {
102         ClientResponse resp = getSecurityFailureResponseFromPartialBuilder(notFound().accept("*/*"));
103         assertResponseIs(resp, ClientResponse.Status.NOT_FOUND, MediaType.APPLICATION_XML_TYPE);
104     }
105 
106     @Test
107     public void notFoundErrorsAreSentAsXmlWhenRequested() {
108         ClientResponse resp = getSecurityFailureResponseFromPartialBuilder(notFound().accept(MediaType.APPLICATION_XML_TYPE));
109         assertResponseIs(resp, ClientResponse.Status.NOT_FOUND, MediaType.APPLICATION_XML_TYPE);
110     }
111 
112     @Test
113     public void notFoundErrorsAreSentAsJsonWhenRequested() {
114         ClientResponse resp = getSecurityFailureResponseFromPartialBuilder(notFound().accept(MediaType.APPLICATION_JSON_TYPE));
115         assertResponseIs(resp, ClientResponse.Status.NOT_FOUND, MediaType.APPLICATION_JSON_TYPE);
116     }
117 }