1 package com.atlassian.plugins.rest.module.filter;
2
3 import com.sun.jersey.core.util.MultivaluedMapImpl;
4 import com.sun.jersey.spi.container.ContainerRequest;
5 import static org.junit.Assert.assertEquals;
6 import org.junit.Test;
7 import org.junit.runner.RunWith;
8 import org.mockito.Mock;
9 import static org.mockito.Mockito.when;
10 import org.mockito.runners.MockitoJUnitRunner;
11
12 import javax.ws.rs.core.HttpHeaders;
13 import javax.ws.rs.core.MediaType;
14 import javax.ws.rs.core.MultivaluedMap;
15
16
17
18
19 @RunWith(MockitoJUnitRunner.class)
20 public class AcceptHeaderJerseyMvcFilterTest
21 {
22 private final AcceptHeaderJerseyMvcFilter filter = new AcceptHeaderJerseyMvcFilter();
23
24 @Mock
25 private ContainerRequest request;
26
27 @Test
28 public void testFilterWithoutTextHtmlContentType()
29 {
30 final String accept = "some/content-type";
31 final MultivaluedMap<String, String> headers = getHeadersMap(accept);
32
33 when(request.getRequestHeaders()).thenReturn(headers);
34 filter.filter(request);
35
36 assertEquals(accept, headers.getFirst(HttpHeaders.ACCEPT));
37 }
38
39 @Test
40 public void testFilterWithTextHtmlContentTypeFirst()
41 {
42 final String accept = "text/html,some/content-type";
43 final MultivaluedMap<String, String> headers = getHeadersMap(accept);
44
45 when(request.getRequestHeaders()).thenReturn(headers);
46 filter.filter(request);
47
48 assertEquals(accept, headers.getFirst(HttpHeaders.ACCEPT));
49 }
50
51 @Test
52 public void testFilterWithTextHtmlContentTypeNotFirst()
53 {
54 final String accept = "some/content-type,text/html,some-other/content-type";
55 final MultivaluedMap<String, String> headers = getHeadersMap(accept);
56
57 when(request.getRequestHeaders()).thenReturn(headers);
58 filter.filter(request);
59
60 assertEquals(MediaType.TEXT_HTML + "," + accept, headers.getFirst(HttpHeaders.ACCEPT));
61 }
62
63 @Test
64 public void testFilterWithWildcardContentTypeNotFirst()
65 {
66 final String accept = "some/content-type,*/*,some-other/content-type";
67 final MultivaluedMap<String, String> headers = getHeadersMap(accept);
68
69 when(request.getRequestHeaders()).thenReturn(headers);
70 filter.filter(request);
71
72 assertEquals(MediaType.TEXT_HTML + "," + MediaType.APPLICATION_XML + "," + accept, headers.getFirst(HttpHeaders.ACCEPT));
73 }
74
75 @Test
76 public void testFilterWithWildcardContentType()
77 {
78 final String accept = "*/*,some-other/content-type";
79 final MultivaluedMap<String, String> headers = getHeadersMap(accept);
80
81 when(request.getRequestHeaders()).thenReturn(headers);
82 filter.filter(request);
83
84 assertEquals(MediaType.TEXT_HTML + "," + MediaType.APPLICATION_XML + "," + accept, headers.getFirst(HttpHeaders.ACCEPT));
85 }
86
87 @Test
88 public void testFilterWithWildcardOnlyContentType()
89 {
90 final String accept = "*/*";
91 final MultivaluedMap<String, String> headers = getHeadersMap(accept);
92
93 when(request.getRequestHeaders()).thenReturn(headers);
94 filter.filter(request);
95
96 assertEquals(MediaType.TEXT_HTML + "," + MediaType.APPLICATION_XML + "," + accept, headers.getFirst(HttpHeaders.ACCEPT));
97 }
98
99 private MultivaluedMap<String, String> getHeadersMap(final String value)
100 {
101 final MultivaluedMapImpl multivaluedMap = new MultivaluedMapImpl();
102 multivaluedMap.putSingle(HttpHeaders.ACCEPT, value);
103 return multivaluedMap;
104 }
105 }