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
55
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
68
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 }