1 package com.atlassian.johnson.plugin.servlet.filter;
2
3 import com.atlassian.johnson.Johnson;
4 import com.atlassian.johnson.JohnsonEventContainer;
5 import com.atlassian.plugin.servlet.filter.FilterDispatcherCondition;
6 import com.atlassian.plugin.servlet.filter.FilterLocation;
7 import org.junit.Before;
8 import org.junit.Test;
9 import org.junit.runner.RunWith;
10 import org.mockito.InOrder;
11 import org.mockito.InjectMocks;
12 import org.mockito.Mock;
13 import org.mockito.runners.MockitoJUnitRunner;
14
15 import javax.servlet.FilterChain;
16 import javax.servlet.FilterConfig;
17 import javax.servlet.ServletContext;
18 import javax.servlet.ServletException;
19 import javax.servlet.http.HttpServletRequest;
20 import javax.servlet.http.HttpServletResponse;
21
22 import static org.mockito.Mockito.endsWith;
23 import static org.mockito.Mockito.eq;
24 import static org.mockito.Mockito.inOrder;
25 import static org.mockito.Mockito.same;
26 import static org.mockito.Mockito.when;
27
28 @RunWith(MockitoJUnitRunner.class)
29 public class JohnsonServletFilterModuleContainerFilterTest {
30
31 @Mock
32 private FilterConfig config;
33 @Mock
34 private JohnsonEventContainer eventContainer;
35 @InjectMocks
36 private JohnsonServletFilterModuleContainerFilter filter;
37 @Mock
38 private FilterChain filterChain;
39 @Mock
40 private HttpServletRequest request;
41 @Mock
42 private HttpServletResponse response;
43 @Mock
44 private ServletContext servletContext;
45
46 @Before
47 public void setup() throws ServletException {
48 when(config.getInitParameter(eq("dispatcher"))).thenReturn(FilterDispatcherCondition.REQUEST.name());
49 when(config.getInitParameter(eq("location"))).thenReturn(FilterLocation.AFTER_ENCODING.name());
50 when(config.getServletContext()).thenReturn(servletContext);
51
52 when(servletContext.getAttribute(eq(Johnson.ATTR_EVENT_CONTAINER))).thenReturn(eventContainer);
53
54 filter.init(config);
55 }
56
57
58
59
60
61
62
63 @Test
64 public void testDoFilter() throws Exception {
65 filter.doFilter(request, response, filterChain);
66
67 InOrder ordered = inOrder(config, eventContainer, filterChain, servletContext);
68 ordered.verify(servletContext).getAttribute(eq(Johnson.ATTR_EVENT_CONTAINER));
69 ordered.verify(eventContainer).hasEvents();
70 ordered.verify(config).getServletContext();
71 ordered.verify(servletContext).getAttribute(endsWith("servletModuleManager"));
72 ordered.verify(filterChain).doFilter(same(request), same(response));
73 ordered.verifyNoMoreInteractions();
74 }
75
76 @Test
77 public void testDoFilterWhenJohnsoned() throws Exception {
78 when(eventContainer.hasEvents()).thenReturn(true);
79
80 filter.doFilter(request, response, filterChain);
81
82 InOrder ordered = inOrder(config, eventContainer, filterChain, servletContext);
83 ordered.verify(servletContext).getAttribute(eq(Johnson.ATTR_EVENT_CONTAINER));
84 ordered.verify(eventContainer).hasEvents();
85 ordered.verify(filterChain).doFilter(same(request), same(response));
86 ordered.verifyNoMoreInteractions();
87 }
88 }