1 /**
2 *
3 */
4 package org.melati.servlet.test;
5
6 import javax.servlet.ServletException;
7 import javax.servlet.http.HttpServletRequest;
8 import javax.servlet.http.HttpServletResponse;
9 import javax.servlet.http.HttpSession;
10
11 import org.melati.Melati;
12 import org.melati.util.HttpServletRequestParameters;
13
14 import junit.framework.TestCase;
15
16 import com.mockobjects.constraint.Constraint;
17 import com.mockobjects.constraint.IsEqual;
18 import com.mockobjects.dynamic.Mock;
19
20 /**
21 * @author timp
22 *
23 */
24 public class PoemServletTest extends TestCase {
25
26 /**
27 * Constructor for PoemServletTest.
28 * @param name
29 */
30 public PoemServletTest(String name) {
31 super(name);
32 }
33
34 /**
35 * @see PoemTestCase#setUp()
36 */
37 protected void setUp()
38 throws Exception {
39 super.setUp();
40 }
41
42 /**
43 * @see TestCase#tearDown()
44 */
45 protected void tearDown()
46 throws Exception {
47 super.tearDown();
48 }
49
50 /**
51 * @throws ServletException
52 * @see org.melati.servlet.PoemServlet#getSysAdminName()
53 */
54 public void testGetSysAdminName() throws ServletException {
55
56 MockServletConfig mockServletConfig = new MockServletConfig();
57
58 org.melati.test.PoemServletTest aServlet =
59 new org.melati.test.PoemServletTest();
60 aServlet.init(mockServletConfig);
61 assertEquals("nobody", aServlet.getSysAdminName());
62
63 aServlet.destroy();
64 }
65
66 /**
67 * @throws ServletException
68 * @see org.melati.servlet.PoemServlet#getSysAdminEmail()
69 */
70 public void testGetSysAdminEmail() throws ServletException {
71 MockServletConfig mockServletConfig = new MockServletConfig();
72 org.melati.test.PoemServletTest aServlet =
73 new org.melati.test.PoemServletTest();
74 aServlet.init(mockServletConfig);
75 assertEquals("nobody@nobody.com", aServlet.getSysAdminEmail());
76
77 aServlet.destroy();
78
79 }
80
81
82 /**
83 * @see org.melati.servlet.PoemServlet#prePoemSession(Melati)
84 */
85 public void testPrePoemSession() {
86
87 }
88
89 /**
90 * @throws Exception
91 * @see org.melati.servlet.ConfigServlet#doGet(HttpServletRequest, HttpServletResponse)
92 */
93 public void testDoGetHttpServletRequestHttpServletResponse() throws Exception {
94 MockServletRequest mockHttpServletRequest = new MockServletRequest();
95 MockServletResponse mockHttpServletResponse = new MockServletResponse();
96
97 mockHttpServletRequest.setPathInfo("/melatitest/user/1");
98
99 mockHttpServletRequest.setHeader("Accept-Charset", "ISO-8859-1");
100
101
102 MockServletConfig mockServletConfig = new MockServletConfig();
103
104 org.melati.test.HttpAuthenticationPoemServletTest aServlet =
105 new org.melati.test.HttpAuthenticationPoemServletTest();
106 aServlet.init(mockServletConfig);
107 aServlet.doGet(mockHttpServletRequest,
108 mockHttpServletResponse);
109 String output = mockHttpServletResponse.getWritten();
110 assertTrue("Unexpected output (check org.melati.LogicalDatabase properties): " + output.toString(),
111 output.toString().indexOf("<h2>PoemServlet Test</h2>") != -1);
112
113 aServlet.destroy();
114 }
115
116 /**
117 * @see org.melati.servlet.ConfigServlet#doPost(HttpServletRequest, HttpServletResponse)
118 */
119 public void testDoPostHttpServletRequestHttpServletResponse() throws Exception {
120 MockServletRequest mockHttpServletRequest = new MockServletRequest();
121 MockServletResponse mockHttpServletResponse = new MockServletResponse();
122
123 mockHttpServletRequest.setCharacterEncoding("ISO-8859-1");
124 mockHttpServletRequest.setPathInfo("/melatitest/user/1");
125 mockHttpServletRequest.setHeader("Accept-Charset", "ISO-8859-1");
126
127
128 MockServletConfig mockServletConfig = new MockServletConfig();
129
130 org.melati.test.HttpAuthenticationPoemServletTest aServlet =
131 new org.melati.test.HttpAuthenticationPoemServletTest();
132 aServlet.init(mockServletConfig);
133 aServlet.doPost(mockHttpServletRequest,
134 mockHttpServletResponse);
135 String output = mockHttpServletResponse.getWritten();
136 assertTrue("Unexpected output (check org.melati.LogicalDatabase properties): " +
137 output.toString(), output.toString().indexOf("<h2>PoemServlet Test</h2>") != -1);
138 aServlet.destroy();
139
140 }
141
142 /**
143 * @throws Exception
144 * @see org.melati.servlet.PoemServlet#error(Melati, Exception)
145 */
146 public void testError() throws Exception {
147 MockServletRequest mockHttpServletRequest = new MockServletRequest();
148 MockServletResponse mockHttpServletResponse = new MockServletResponse();
149
150 Mock mockSession = new Mock(HttpSession.class);
151 mockSession.expectAndReturn("getId", "1");
152 mockSession.expectAndReturn("getId", "1");
153
154 mockSession.expect("removeAttribute", "org.melati.login.HttpSessionAccessHandler.overlayParameters");
155 mockSession.expectAndReturn("getId", "1");
156 mockSession.expectAndReturn("getId", "1");
157 mockSession.expectAndReturn("getAttribute", "org.melati.login.HttpSessionAccessHandler.user", null);
158 mockSession.expectAndReturn("getId", "1");
159
160 mockSession.expect("setAttribute", new Constraint [] {new IsEqual("org.melati.login.Login.triggeringRequestParameters"),
161 new IsInstanceOf(HttpServletRequestParameters.class)});
162
163 mockSession.expect("setAttribute", new Constraint [] {new IsEqual("org.melati.login.Login.triggeringException"),
164 new IsInstanceOf(org.melati.poem.AccessPoemException.class)});
165
166 mockSession.expectAndReturn("getId", "1");
167
168 MockServletConfig mockServletConfig = new MockServletConfig();
169 mockServletConfig.setInitParameter("pathInfo", "melatitest/user/1");
170
171 mockSession.expectAndReturn("getId", "1");
172 mockSession.expectAndReturn("getId", "1");
173
174 mockHttpServletRequest.setSession(mockSession.proxy());
175
176 mockSession.expectAndReturn("getAttribute", "org.melati.login.HttpSessionAccessHandler.overlayParameters",
177 new HttpServletRequestParameters(mockHttpServletRequest));
178
179
180 ExceptionPoemServlet aServlet =
181 new ExceptionPoemServlet();
182 aServlet.init(mockServletConfig);
183 aServlet.doPost(mockHttpServletRequest,
184 mockHttpServletResponse);
185 aServlet.destroy();
186
187 String output = mockHttpServletResponse.getWritten();
188
189 assertTrue(output.toString().equals(""));
190
191 }
192
193 /**
194 * Test logical database.
195 *
196 */
197 public void testLDB() throws Exception {
198 MockServletResponse response = new MockServletResponse();
199 MockServletRequest request = new MockServletRequest();
200 MockServletConfig mockServletConfig = new MockServletConfig();
201 LDBPoemServlet aServlet =
202 new LDBPoemServlet();
203 aServlet.init(mockServletConfig);
204 aServlet.doPost(request, response);
205 System.out.println(response.getWritten().toString());
206 aServlet.destroy();
207 assertTrue(response.getWritten().toString().indexOf("logicalDatabase = melatijunit") != -1);
208 }
209
210 /** Tests whether the value is an instance of a class.
211 */
212 public class IsInstanceOf implements Constraint
213 {
214 private Class _class;
215
216 /** Creates a new instance of IsInstanceOf
217 *
218 * @param theclass
219 * The predicate evaluates to true for instances of this class
220 * or one of its subclasses.
221 */
222 public IsInstanceOf( Class theclass ) {
223 _class = theclass;
224 }
225
226 public boolean eval( Object arg ) {
227
228 return _class.isInstance( arg );
229 }
230
231 public String toString() {
232 return "an instance of <" + _class.getName() + ">";
233 }
234 }
235
236 }