1 package com.atlassian.plugin.servlet;
2
3 import junit.framework.TestCase;
4 import org.mockito.ArgumentCaptor;
5 import org.mockito.Mock;
6
7 import javax.servlet.http.HttpServletRequest;
8 import javax.servlet.http.HttpServletResponse;
9
10 import static org.mockito.Mockito.eq;
11 import static org.mockito.Mockito.mock;
12 import static org.mockito.Mockito.verify;
13 import static org.mockito.Mockito.verifyNoMoreInteractions;
14 import static org.mockito.Mockito.when;
15
16 public class TestResourceDownloadUtils extends TestCase {
17 private static final long ONE_YEAR = 60L * 60L * 24L * 365L;
18 private static final long ONE_YEAR_MS = ONE_YEAR * 1000;
19 private static final String CACHE_CONTROL = "Cache-Control";
20
21 @Mock
22 private HttpServletRequest mockRequest;
23
24 @Mock
25 private HttpServletResponse mockResponse;
26
27 public void setUp() {
28 mockRequest = mock(HttpServletRequest.class);
29 mockResponse = mock(HttpServletResponse.class);
30 }
31
32 public void testAddPublicCachingHeaders() {
33 when(mockRequest.getParameter(eq("cache"))).thenReturn("true");
34
35
36 long expectedTime = aboutNowPlusAYear();
37
38 ResourceDownloadUtils.addPublicCachingHeaders(mockRequest, mockResponse);
39
40 ArgumentCaptor<Long> argument = ArgumentCaptor.forClass(Long.class);
41 verify(mockResponse).setDateHeader(eq("Expires"), argument.capture());
42 assertTrue("Set expires header beyond one year from now", expectedTime <= argument.getValue());
43
44 verify(mockResponse).setHeader(CACHE_CONTROL, "max-age=" + ONE_YEAR);
45 }
46
47 public void testAddCachingHeadersWithCacheControls() {
48 when(mockRequest.getParameter(eq("cache"))).thenReturn("true");
49
50
51 long expectedTime = aboutNowPlusAYear();
52
53 ResourceDownloadUtils.addCachingHeaders(mockRequest, mockResponse, "private", "foo");
54
55 ArgumentCaptor<Long> argument = ArgumentCaptor.forClass(Long.class);
56 verify(mockResponse).setDateHeader(eq("Expires"), argument.capture());
57 assertTrue("Set expires header beyond one year from now", expectedTime <= argument.getValue());
58
59 verify(mockResponse).setHeader(CACHE_CONTROL, "max-age=" + ONE_YEAR);
60 verify(mockResponse).addHeader(CACHE_CONTROL, "private");
61 verify(mockResponse).addHeader(CACHE_CONTROL, "foo");
62 }
63
64 public void testNoCachingHeadersWhenCachingDisabled() {
65 when(mockRequest.getParameter(eq("cache"))).thenReturn("false");
66
67 ResourceDownloadUtils.addPublicCachingHeaders(mockRequest, mockResponse);
68
69 verifyNoMoreInteractions(mockResponse);
70 }
71
72 private static long aboutNowPlusAYear() {
73 return System.currentTimeMillis() + ONE_YEAR_MS;
74 }
75 }