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 }