1 package com.atlassian.plugin.servlet.filter;
2
3 import com.atlassian.plugin.servlet.ServletModuleManager;
4 import junit.framework.TestCase;
5 import org.mockito.Mock;
6
7 import javax.servlet.Filter;
8 import javax.servlet.FilterChain;
9 import javax.servlet.FilterConfig;
10 import javax.servlet.ServletException;
11 import javax.servlet.ServletRequest;
12 import javax.servlet.ServletResponse;
13 import javax.servlet.http.HttpServletRequest;
14 import javax.servlet.http.HttpServletResponse;
15 import java.io.IOException;
16 import java.util.Collections;
17
18 import static org.mockito.Mockito.any;
19 import static org.mockito.Mockito.eq;
20 import static org.mockito.Mockito.verify;
21 import static org.mockito.Mockito.when;
22 import static org.mockito.MockitoAnnotations.initMocks;
23
24 public class TestServletFilterModuleContainerFilter extends TestCase
25 {
26 @Mock private ServletModuleManager moduleManager;
27 @Mock private HttpServletRequest request;
28 @Mock private HttpServletResponse response;
29 @Mock private FilterChain filterChain;
30
31 public void setUp() {
32 initMocks(this);
33 }
34
35 public void testFilter() throws IOException, ServletException
36 {
37 when(moduleManager.getFilters(any(FilterLocation.class), eq("/myfilter"), any(FilterConfig.class), eq(FilterDispatcherCondition.REQUEST))).thenReturn(Collections.<Filter>emptyList());
38
39 MyFilter filter = new MyFilter(moduleManager);
40
41 when(request.getContextPath()).thenReturn("/myapp");
42 when(request.getRequestURI()).thenReturn("/myapp/myfilter");
43
44 filter.doFilter(request, response, filterChain);
45 verify(filterChain).doFilter(any(ServletRequest.class), any(ServletResponse.class));
46 }
47
48 public void testFilterNoDispatcher() throws IOException, ServletException
49 {
50 when(moduleManager.getFilters(any(FilterLocation.class), eq("/myfilter"), any(FilterConfig.class), eq(FilterDispatcherCondition.REQUEST))).thenReturn(Collections.<Filter>emptyList());
51
52 try
53 {
54 new MyFilterNoDispatcher(moduleManager);
55 fail("Should have thrown exception on init due to lack of dispatcher value");
56 }
57 catch (ServletException ex)
58 {
59
60 }
61 }
62
63 public void testNoServletModuleManager() throws IOException, ServletException
64 {
65 MyFilter filter = new MyFilter(null);
66 filter.doFilter(request, response, filterChain);
67 verify(filterChain).doFilter(any(ServletRequest.class), any(ServletResponse.class));
68 }
69
70 static class MyFilter extends ServletFilterModuleContainerFilter
71 {
72 @Mock private FilterConfig filterConfig;
73
74 private final ServletModuleManager moduleManager;
75
76 public MyFilter(ServletModuleManager moduleManager) throws ServletException
77 {
78 initMocks(this);
79 this.moduleManager = moduleManager;
80 when(filterConfig.getInitParameter("location")).thenReturn("after-encoding");
81 when(filterConfig.getInitParameter("dispatcher")).thenReturn("REQUEST");
82 init(filterConfig);
83 }
84
85 protected ServletModuleManager getServletModuleManager()
86 {
87 return moduleManager;
88 }
89 }
90
91 static class MyFilterNoDispatcher extends ServletFilterModuleContainerFilter
92 {
93 @Mock private FilterConfig filterConfig;
94
95 private final ServletModuleManager moduleManager;
96
97 public MyFilterNoDispatcher(ServletModuleManager moduleManager) throws ServletException
98 {
99 initMocks(this);
100 this.moduleManager = moduleManager;
101 when(filterConfig.getInitParameter("location")).thenReturn("after-encoding");
102 init(filterConfig);
103 }
104
105 protected ServletModuleManager getServletModuleManager()
106 {
107 return moduleManager;
108 }
109 }
110 }