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