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