View Javadoc

1   /**
2    * Copyright 2011 The Kuali Foundation Licensed under the
3    * Educational Community License, Version 2.0 (the "License"); you may
4    * not use this file except in compliance with the License. You may
5    * obtain a copy of the License at
6    *
7    * http://www.osedu.org/licenses/ECL-2.0
8    *
9    * Unless required by applicable law or agreed to in writing,
10   * software distributed under the License is distributed on an "AS IS"
11   * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
12   * or implied. See the License for the specific language governing
13   * permissions and limitations under the License.
14   */
15  package org.kuali.mobility.shared.controllers;
16  
17  import org.apache.log4j.Logger;
18  import org.junit.AfterClass;
19  import org.junit.Before;
20  import org.junit.BeforeClass;
21  import org.junit.Test;
22  import org.kuali.mobility.shared.Constants;
23  import org.kuali.mobility.shared.LoginService;
24  import org.kuali.mobility.shared.entity.MockUser;
25  import org.springframework.context.ApplicationContext;
26  import org.springframework.context.support.FileSystemXmlApplicationContext;
27  import org.springframework.mock.web.MockHttpServletRequest;
28  import org.springframework.mock.web.MockHttpServletResponse;
29  import org.springframework.mock.web.MockHttpSession;
30  import org.springframework.mock.web.MockServletContext;
31  import org.springframework.ui.ExtendedModelMap;
32  import org.springframework.ui.Model;
33  import org.springframework.validation.BindingResult;
34  import org.springframework.validation.MapBindingResult;
35  
36  import java.security.MessageDigest;
37  import java.security.NoSuchAlgorithmException;
38  import java.util.HashMap;
39  
40  import static org.junit.Assert.assertTrue;
41  import static org.junit.Assert.fail;
42  
43  /**
44   * @author Kuali Mobility Team (mobility.collab@kuali.org)
45   */
46  public class MockLoginControllerTest {
47  	private static final Logger LOG = Logger.getLogger(MockLoginControllerTest.class);
48  
49  	private static ApplicationContext applicationContext;
50  
51  	private static MockServletContext servletContext;
52  	private MockLoginController controller;
53  
54  	private static final String LOGIN_VIEW = "mocklogin";
55  	private static final String REDIRECT_VIEW = "redirect:/home";
56  	private static final String TEST_USER = "nurul";
57  	private static final String EMPTY = "";
58  	private static final String TEST_PASSWORD = "6968a2c57c3a4fee8fadc79a80355e4d";
59  	private static final String INVALID = "1234567890";
60  
61  	private static String[] getConfigLocations() {
62  		return new String[] { "classpath:/MockLoginControllerSpringBeans.xml" };
63  	}
64  
65  	@BeforeClass
66  	public static void setUpClass() throws Exception {
67  		MockLoginControllerTest.setApplicationContext(new FileSystemXmlApplicationContext(getConfigLocations()));
68  		servletContext = new MockServletContext();
69  	}
70  
71  	@AfterClass
72  	public static void tearDownClass() throws Exception {
73  	}
74  
75  	@Before
76  	public void preTest() {
77  		this.setController((MockLoginController) getApplicationContext().getBean("loginController"));
78  	}
79  
80  	@Test
81  	public void testMockLoginNoUser() {
82  		MockHttpServletRequest request = new MockHttpServletRequest(servletContext);
83  		MockHttpServletResponse response = new MockHttpServletResponse();
84  		Model uiModel = new ExtendedModelMap();
85  
86  		String viewName = getController().mockLogin(request,response,uiModel);
87  
88  		assertTrue("View name is incorrect.", LOGIN_VIEW.equals(viewName));
89  	}
90  
91  	@Test
92  	public void testMockLoginWithUser() {
93  		MockHttpServletRequest request = new MockHttpServletRequest(servletContext);
94  		MockHttpServletResponse response = new MockHttpServletResponse();
95  		Model uiModel = new ExtendedModelMap();
96  
97  		MockUser user = (MockUser)getApplicationContext().getBean("user");
98  		user.setUserId(TEST_USER);
99  		user.setPassword(TEST_PASSWORD);
100 
101 		MockHttpSession session = new MockHttpSession();
102 		session.setAttribute(Constants.KME_MOCK_USER_KEY,user);
103 
104 		request.setSession(session);
105 
106 		String viewName = getController().mockLogin(request,response,uiModel);
107 
108 		assertTrue("View name is incorrect.", LOGIN_VIEW.equals(viewName));
109 	}
110 
111 	@Test
112 	public void testSubmitWithValidUser() {
113 		MockHttpServletRequest request = new MockHttpServletRequest(servletContext);
114 		MockHttpServletResponse response = new MockHttpServletResponse();
115 		Model uiModel = new ExtendedModelMap();
116 
117 		MockUser user = (MockUser)getApplicationContext().getBean("user");
118 		user.setUserId(TEST_USER);
119 		user.setPassword(TEST_PASSWORD);
120 
121 		MockHttpSession session = new MockHttpSession();
122 		session.setAttribute(Constants.KME_MOCK_USER_KEY,user);
123 
124 		request.setSession(session);
125 
126 		BindingResult result = new MapBindingResult(new HashMap<String,String>(),new String());
127 
128 		String viewName;
129 		try {
130 			viewName = getController().submit(request, response, uiModel, user, result );
131 		} catch( NullPointerException npe ) {
132 			LOG.error(npe.getLocalizedMessage(),npe);
133 			viewName = null;
134 		}
135 		assertTrue("View name is incorrect.", REDIRECT_VIEW.equals(viewName));
136 	}
137 
138 	@Test
139 	public void testSubmitWithInvalidPassword() {
140 		MockHttpServletRequest request = new MockHttpServletRequest(servletContext);
141 		MockHttpServletResponse response = new MockHttpServletResponse();
142 		Model uiModel = new ExtendedModelMap();
143 
144 		MockUser user = (MockUser)getApplicationContext().getBean("user");
145 		user.setUserId(TEST_USER);
146 		user.setPassword(INVALID);
147 
148 		MockHttpSession session = new MockHttpSession();
149 		session.setAttribute(Constants.KME_MOCK_USER_KEY,user);
150 
151 		request.setSession(session);
152 
153 		BindingResult result = new MapBindingResult(new HashMap<String,String>(),new String());
154 
155 		String viewName;
156 		try {
157 			viewName = getController().submit(request, response, uiModel, user, result );
158 		} catch( NullPointerException npe ) {
159 			LOG.error(npe.getLocalizedMessage(),npe);
160 			viewName = null;
161 		}
162 		assertTrue("View name is incorrect.", LOGIN_VIEW.equals(viewName));
163 	}
164 
165 	@Test
166 	public void testSubmitWithNullPassword() {
167 		MockHttpServletRequest request = new MockHttpServletRequest(servletContext);
168 		MockHttpServletResponse response = new MockHttpServletResponse();
169 		Model uiModel = new ExtendedModelMap();
170 
171 		MockUser user = (MockUser)getApplicationContext().getBean("user");
172 		user.setUserId(TEST_USER);
173 
174 		MockHttpSession session = new MockHttpSession();
175 		session.setAttribute(Constants.KME_MOCK_USER_KEY,user);
176 
177 		request.setSession(session);
178 
179 		BindingResult result = new MapBindingResult(new HashMap<String,String>(),new String());
180 
181 		String viewName;
182 		try {
183 			viewName = getController().submit(request, response, uiModel, user, result );
184 		} catch( NullPointerException npe ) {
185 			LOG.error(npe.getLocalizedMessage(),npe);
186 			viewName = null;
187 		}
188 		assertTrue("View name is incorrect.", LOGIN_VIEW.equals(viewName));
189 	}
190 
191 	@Test
192 	public void testSubmitWithEmptyPassword() {
193 		MockHttpServletRequest request = new MockHttpServletRequest(servletContext);
194 		MockHttpServletResponse response = new MockHttpServletResponse();
195 		Model uiModel = new ExtendedModelMap();
196 
197 		MockUser user = (MockUser)getApplicationContext().getBean("user");
198 		user.setUserId(TEST_USER);
199 		user.setPassword(EMPTY);
200 
201 		MockHttpSession session = new MockHttpSession();
202 		session.setAttribute(Constants.KME_MOCK_USER_KEY,user);
203 
204 		request.setSession(session);
205 
206 		BindingResult result = new MapBindingResult(new HashMap<String,String>(),new String());
207 
208 		String viewName;
209 		try {
210 			viewName = getController().submit(request, response, uiModel, user, result );
211 		} catch( NullPointerException npe ) {
212 			LOG.error(npe.getLocalizedMessage(),npe);
213 			viewName = null;
214 		}
215 		assertTrue("View name is incorrect.", LOGIN_VIEW.equals(viewName));
216 	}
217 
218 	@Test
219 	public void testSubmitWithNullUserId() {
220 		MockHttpServletRequest request = new MockHttpServletRequest(servletContext);
221 		MockHttpServletResponse response = new MockHttpServletResponse();
222 		Model uiModel = new ExtendedModelMap();
223 
224 		MockUser user = (MockUser)getApplicationContext().getBean("user");
225 		user.setUserId(null);
226 		user.setPassword(TEST_PASSWORD);
227 
228 		MockHttpSession session = new MockHttpSession();
229 		session.setAttribute(Constants.KME_MOCK_USER_KEY,user);
230 
231 		request.setSession(session);
232 
233 		BindingResult result = new MapBindingResult(new HashMap<String,String>(),new String());
234 
235 		String viewName;
236 		try {
237 			viewName = getController().submit(request, response, uiModel, user, result );
238 		} catch( NullPointerException npe ) {
239 			LOG.error(npe.getLocalizedMessage(),npe);
240 			viewName = null;
241 		}
242 		assertTrue("View name is incorrect.", LOGIN_VIEW.equals(viewName));
243 	}
244 
245 	@Test
246 	public void testSubmitWithEmptyUserId() {
247 		MockHttpServletRequest request = new MockHttpServletRequest(servletContext);
248 		MockHttpServletResponse response = new MockHttpServletResponse();
249 		Model uiModel = new ExtendedModelMap();
250 
251 		MockUser user = (MockUser)getApplicationContext().getBean("user");
252 		user.setUserId(EMPTY);
253 		user.setPassword(TEST_PASSWORD);
254 
255 		MockHttpSession session = new MockHttpSession();
256 		session.setAttribute(Constants.KME_MOCK_USER_KEY,user);
257 
258 		request.setSession(session);
259 
260 		BindingResult result = new MapBindingResult(new HashMap<String,String>(),new String());
261 
262 		String viewName;
263 		try {
264 			viewName = getController().submit(request, response, uiModel, user, result );
265 		} catch( NullPointerException npe ) {
266 			LOG.error(npe.getLocalizedMessage(),npe);
267 			viewName = null;
268 		}
269 		assertTrue("View name is incorrect.", LOGIN_VIEW.equals(viewName));
270 	}
271 
272 	@Test
273 	public void testCalculateHash() {
274 		String expected = "2a7ee8b03046524ae8b6fcdc88345fa5";
275 		try {
276 			String response = MockLoginController.calculateHash(MessageDigest.getInstance("MD5"),TEST_PASSWORD);
277 			assertTrue("Expected "+expected+" and got "+response,expected.equals(response));
278 		} catch( NoSuchAlgorithmException nsae ) {
279 			LOG.error(nsae.getLocalizedMessage(),nsae);
280 			fail("Class being tested threw an exception.");
281 		} catch( Exception e ) {
282 			LOG.error(e.getLocalizedMessage(),e);
283 			fail("Class being tested threw an exception.");
284 		}
285 	}
286 
287 	@Test
288 	public void testGetService() {
289 		LoginService testService = getController().getLoginService();
290 		assertTrue("Failed to find login service.",testService!=null && testService.equals((LoginService)getApplicationContext().getBean("loginService")));
291 	}
292 
293 	public static ApplicationContext getApplicationContext() {
294 		return applicationContext;
295 	}
296 
297 	public static void setApplicationContext(ApplicationContext applicationContext) {
298 		MockLoginControllerTest.applicationContext = applicationContext;
299 	}
300 
301 	public MockLoginController getController() {
302 		return controller;
303 	}
304 
305 	public void setController(MockLoginController controller) {
306 		this.controller = controller;
307 	}
308 }