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     // Request gets redirected to login
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           //System.err.println("Argument to Mock:" + arg);
228           return _class.isInstance( arg );
229       }
230       
231       public String toString() {
232           return "an instance of <" + _class.getName() + ">";
233       }
234   }
235 
236 }