View Javadoc
1   package com.atlassian.plugin.servlet;
2   
3   import com.atlassian.plugin.Plugin;
4   import org.dom4j.Element;
5   import org.junit.Before;
6   import org.junit.Rule;
7   import org.junit.Test;
8   import org.junit.rules.ExpectedException;
9   import org.junit.runner.RunWith;
10  import org.mockito.ArgumentCaptor;
11  import org.mockito.Captor;
12  import org.mockito.Mock;
13  import org.mockito.junit.MockitoJUnitRunner;
14  
15  import javax.servlet.Servlet;
16  import javax.servlet.ServletContext;
17  import javax.servlet.http.HttpServlet;
18  import java.util.HashMap;
19  import java.util.concurrent.ConcurrentHashMap;
20  
21  import static org.hamcrest.MatcherAssert.assertThat;
22  import static org.hamcrest.Matchers.is;
23  import static org.mockito.Mockito.mock;
24  import static org.mockito.Mockito.verify;
25  import static org.mockito.Mockito.verifyNoMoreInteractions;
26  import static org.mockito.Mockito.when;
27  
28  @RunWith(MockitoJUnitRunner.class)
29  public class TestPluginServletContextWrapper {
30      @Rule
31      public final ExpectedException expectedException = ExpectedException.none();
32  
33      @Mock
34      private ServletContext servletContext;
35      @Mock
36      private ServletModuleManager servletModuleManager;
37      @Mock
38      private Plugin plugin;
39  
40      @Captor
41      private ArgumentCaptor<Element> elementCaptor;
42  
43      private ServletContext contextWrapper;
44  
45      @Before
46      public void before() {
47          when(servletContext.getAttribute("wrapped")).thenReturn("wrapped value");
48  
49          contextWrapper = new PluginServletContextWrapper(servletModuleManager, plugin, servletContext, new ConcurrentHashMap<>(), new HashMap<>());
50      }
51  
52      @Test
53      public void putAttribute() {
54          // if set attribute is called on the wrapped context it will throw an
55          // exception since it is not expecting it
56          contextWrapper.setAttribute("attr", "value");
57          assertThat(contextWrapper.getAttribute("attr"), is("value"));
58      }
59  
60      @Test
61      public void getAttributeDelegatesToWrappedContext() {
62          assertThat(contextWrapper.getAttribute("wrapped"), is("wrapped value"));
63      }
64  
65      @Test
66      public void putAttributeOverridesWrapperContextAttribute() {
67          // if set attribute is called on the wrapped context it will throw an
68          // exception since it is not expecting it
69          contextWrapper.setAttribute("wrapped", "value");
70          assertThat(contextWrapper.getAttribute("wrapped"), is("value"));
71      }
72  
73      @Test
74      public void addServletByClassName() {
75          contextWrapper.addServlet("roger", RogerServlet.class.getName());
76  
77          verify(servletModuleManager).addServlet(plugin, "roger", RogerServlet.class.getName());
78          verifyNoMoreInteractions(servletModuleManager);
79      }
80  
81      @Test
82      public void addServletByClass() {
83          contextWrapper.addServlet("roger", RogerServlet.class);
84  
85          verify(servletModuleManager).addServlet(plugin, "roger", RogerServlet.class.getName());
86          verifyNoMoreInteractions(servletModuleManager);
87      }
88  
89      @Test
90      public void addServletByExistingServlet() {
91          final RogerServlet rogerServlet = new RogerServlet();
92          contextWrapper.addServlet("roger", rogerServlet);
93  
94          verify(servletModuleManager).addServlet(plugin, "roger", rogerServlet, contextWrapper);
95          verifyNoMoreInteractions(servletModuleManager);
96      }
97  
98      @Test
99      public void addServletWithNonHttpServletVerboten() {
100         expectedException.expect(IllegalArgumentException.class);
101         expectedException.expectMessage("javax.servlet.http.HttpServlet");
102 
103         contextWrapper.addServlet("klaus", mock(Servlet.class));
104     }
105 
106     public class RogerServlet extends HttpServlet {
107     }
108 }