View Javadoc

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       * When there are no Johnson events present, verify that the normal {@code ServletFilterModuleContainerFilter}
59       * logic is invoked. This is done by verifying that an attempt is made to get the {@code ServletModuleManager}.
60       *
61       * @throws Exception should not be thrown
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  }