View Javadoc

1   /**
2    * Copyright 2011-2013 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.junit.Before;
18  import org.junit.BeforeClass;
19  import org.junit.Test;
20  import org.junit.runner.RunWith;
21  import org.kuali.mobility.configparams.service.ConfigParamService;
22  import org.kuali.mobility.security.group.api.Group;
23  import org.kuali.mobility.security.group.api.GroupDao;
24  import org.kuali.mobility.security.group.entity.GroupImpl;
25  import org.kuali.mobility.security.user.api.User;
26  import org.kuali.mobility.security.user.entity.UserImpl;
27  import org.kuali.mobility.shared.Constants;
28  import org.kuali.mobility.shared.entity.Backdoor;
29  import org.mockito.Mock;
30  import org.springframework.mock.web.MockHttpServletRequest;
31  import org.springframework.mock.web.MockHttpServletResponse;
32  import org.springframework.mock.web.MockHttpSession;
33  import org.springframework.mock.web.MockServletContext;
34  import org.springframework.ui.ExtendedModelMap;
35  import org.springframework.ui.Model;
36  import org.springframework.validation.BindingResult;
37  import org.springframework.validation.MapBindingResult;
38  
39  import java.util.HashMap;
40  import java.util.Properties;
41  
42  import static org.junit.Assert.assertFalse;
43  import static org.junit.Assert.assertTrue;
44  import static org.mockito.Matchers.any;
45  import static org.mockito.Mockito.when;
46  
47  /**
48   * @author Kuali Mobility Team (mobility.collab@kuali.org)
49   */
50  @RunWith(org.mockito.runners.MockitoJUnitRunner.class)
51  public class BackdoorControllerTest {
52  	private static final String[] USER = {"oberon",""};
53  	private static final String[] VIEWS = {"backdoor","redirect:/home"};
54  	private static final String BACKDOOR_ATTRIBUTE = "backdoor";
55  	private static final String BACKDOOR_GROUP = "KME-BACKDOOR";
56  	private static final String EMPTY = "";
57  
58  	private static MockServletContext servletContext;
59  	private BackdoorController controller;
60  	private Properties kmeProperties;
61  	private MockHttpServletRequest request;
62  	private MockHttpServletResponse response;
63  	private Model uiModel;
64  
65  	@Mock
66  	private ConfigParamService configParamService;
67  	@Mock
68  	private GroupDao groupDao;
69  
70  	@BeforeClass
71  	public static void setUpClass() throws Exception {
72  		servletContext = new MockServletContext();
73  	}
74  
75  	@Before
76  	public void preTest() {
77  		this.setController(new BackdoorController());
78  		getController().setConfigParamService(this.getConfigParamService());
79  		getController().setGroupDao(this.getGroupDao());
80  		this.setRequest(new MockHttpServletRequest(servletContext));
81  		this.setResponse(new MockHttpServletResponse());
82  		this.setUiModel(new ExtendedModelMap());
83  		getRequest().setSession(new MockHttpSession(servletContext));
84  	}
85  
86  	@Test
87  	public void testBackdoor() {
88  		Backdoor backdoor = new Backdoor();
89  		backdoor.setUserId(USER[0]);
90  		getRequest().getSession().setAttribute(Constants.KME_BACKDOOR_USER_KEY, backdoor);
91  
92  		getController().backdoor(getRequest(), getResponse(), getUiModel());
93  
94  		assertTrue("Failed to find original backdoor in model.", backdoor.equals((Backdoor) (getUiModel().asMap().get(BACKDOOR_ATTRIBUTE))));
95  	}
96  
97  	@Test
98  	public void testBackdoorWhenNull() {
99  		Backdoor backdoor = new Backdoor();
100 		backdoor.setUserId(USER[0]);
101 		getRequest().getSession().setAttribute(Constants.KME_BACKDOOR_USER_KEY, null);
102 
103 		getController().backdoor(getRequest(), getResponse(), getUiModel());
104 
105 		assertFalse("Failed to find original backdoor in model.", backdoor.getUserId().equals((Backdoor) (getUiModel().asMap().get(BACKDOOR_ATTRIBUTE))));
106 	}
107 
108 	@Test
109 	public void testRemoveBackdoor() {
110 		User user = new UserImpl();
111 		user.setLoginName(USER[0]);
112 		getRequest().getSession().setAttribute(Constants.KME_USER_KEY, user);
113 		Backdoor backdoor = new Backdoor();
114 		backdoor.setUserId(USER[0]);
115 		backdoor.setActualUser(user);
116 		getRequest().getSession().setAttribute(Constants.KME_BACKDOOR_USER_KEY,backdoor);
117 
118 		String viewName = getController().removeBackdoor(getRequest(),getResponse(),getUiModel());
119 		assertTrue("Failed to find proper view name.", VIEWS[1].equals(viewName));
120 	}
121 
122 	@Test
123 	public void testRemoveBackdoorWhenNull() {
124 		User user = new UserImpl();
125 		user.setLoginName(USER[0]);
126 		getRequest().getSession().setAttribute(Constants.KME_USER_KEY,user);
127 		Backdoor backdoor = new Backdoor();
128 		backdoor.setUserId(USER[0]);
129 		backdoor.setActualUser(user);
130 		getRequest().getSession().setAttribute(Constants.KME_BACKDOOR_USER_KEY,null);
131 
132 		String viewName = getController().removeBackdoor(getRequest(),getResponse(),getUiModel());
133 		assertTrue("Failed to find proper view name.", VIEWS[1].equals(viewName));
134 	}
135 
136 	@Test
137 	public void testRemoveBackdoorWhenUserNull() {
138 		User user = new UserImpl();
139 		user.setLoginName(USER[0]);
140 		getRequest().getSession().setAttribute(Constants.KME_USER_KEY,null);
141 		Backdoor backdoor = new Backdoor();
142 		backdoor.setUserId(USER[0]);
143 		backdoor.setActualUser(user);
144 		getRequest().getSession().setAttribute(Constants.KME_BACKDOOR_USER_KEY,backdoor);
145 
146 		String viewName = getController().removeBackdoor(getRequest(),getResponse(),getUiModel());
147 		assertTrue("Failed to find proper view name.", VIEWS[1].equals(viewName));
148 	}
149 
150 	@Test
151 	public void testRemoveBackdoorWhenActualUserNull() {
152 		User user = new UserImpl();
153 		user.setLoginName(USER[0]);
154 		getRequest().getSession().setAttribute(Constants.KME_USER_KEY,user);
155 		Backdoor backdoor = new Backdoor();
156 		backdoor.setUserId(USER[0]);
157 		backdoor.setActualUser(null);
158 		getRequest().getSession().setAttribute(Constants.KME_BACKDOOR_USER_KEY,backdoor);
159 
160 		String viewName = getController().removeBackdoor(getRequest(), getResponse(), getUiModel());
161 		assertTrue("Failed to find proper view name.",VIEWS[1].equals(viewName));
162 	}
163 
164 	@Test
165 	public void testSubmit() {
166 		User user = new UserImpl();
167 		user.setLoginName(USER[0]);
168 		getRequest().getSession().setAttribute(Constants.KME_USER_KEY,user);
169 		Backdoor backdoor = new Backdoor();
170 		backdoor.setUserId(USER[0]);
171 		backdoor.setActualUser(null);
172 		getRequest().getSession().setAttribute(Constants.KME_BACKDOOR_USER_KEY,backdoor);
173 
174 		Group group = new GroupImpl();
175 		group.setName(BACKDOOR_GROUP);
176 		group.setId(new Long(87));
177 
178 		when(getController().getConfigParamService().findValueByName(any(String.class))).thenReturn(BACKDOOR_GROUP);
179 		when(getController().getGroupDao().getGroup(BACKDOOR_GROUP)).thenReturn(group);
180 
181 		BindingResult bindingResult = new MapBindingResult(new HashMap<String,String>(),new String());
182 
183 		String viewName = getController().submit(getRequest(),getResponse(),getUiModel(),backdoor,bindingResult);
184 		assertTrue("Failed to find proper view name.",VIEWS[1].equals(viewName));
185 
186 		User altUser = (User)request.getSession().getAttribute(Constants.KME_USER_KEY);
187 		assertTrue("Newly created user could not be retrieved from the session.",altUser != null);
188 		assertTrue("Group KME-BACKDOOR not found on user",altUser.isMember(BACKDOOR_GROUP));
189 	}
190 
191 	@Test
192 	public void testSubmitWithEmptyBackdoorUser() {
193 		User user = new UserImpl();
194 		user.setLoginName(USER[0]);
195 		getRequest().getSession().setAttribute(Constants.KME_USER_KEY,user);
196 		Backdoor backdoor = new Backdoor();
197 		backdoor.setUserId(EMPTY);
198 		backdoor.setActualUser(user);
199 		getRequest().getSession().setAttribute(Constants.KME_BACKDOOR_USER_KEY,backdoor);
200 
201 		BindingResult bindingResult = new MapBindingResult(new HashMap<String,String>(),new String());
202 
203 		String viewName = getController().submit(getRequest(),getResponse(),getUiModel(),backdoor,bindingResult);
204 		assertTrue("Failed to find proper view name.",VIEWS[0].equals(viewName));
205 		assertTrue("Binding result did not contain the expected error.",bindingResult.hasErrors()&&bindingResult.hasFieldErrors("userId"));
206 	}
207 
208 	@Test
209 	public void testSubmitWithNullBackdoorUser() {
210 		User user = new UserImpl();
211 		user.setLoginName(USER[0]);
212 		getRequest().getSession().setAttribute(Constants.KME_USER_KEY,user);
213 		Backdoor backdoor = new Backdoor();
214 		backdoor.setUserId(null);
215 		backdoor.setActualUser(null);
216 		getRequest().getSession().setAttribute(Constants.KME_BACKDOOR_USER_KEY,backdoor);
217 
218 		BindingResult bindingResult = new MapBindingResult(new HashMap<String,String>(),new String());
219 
220 		String viewName = getController().submit(getRequest(),getResponse(),getUiModel(),backdoor,bindingResult);
221 		assertTrue("Failed to find proper view name.",VIEWS[0].equals(viewName));
222 		assertTrue("Binding result did not contain the expected error.",bindingResult.hasErrors()&&bindingResult.hasFieldErrors("userId"));
223 	}
224 
225 	public BackdoorController getController() {
226 		return controller;
227 	}
228 
229 	public void setController(BackdoorController controller) {
230 		this.controller = controller;
231 	}
232 
233 	public Properties getKmeProperties() {
234 		return kmeProperties;
235 	}
236 
237 	public void setKmeProperties(Properties kmeProperties) {
238 		this.kmeProperties = kmeProperties;
239 	}
240 
241 	public MockHttpServletRequest getRequest() {
242 		return request;
243 	}
244 
245 	public void setRequest(MockHttpServletRequest request) {
246 		this.request = request;
247 	}
248 
249 	public MockHttpServletResponse getResponse() {
250 		return response;
251 	}
252 
253 	public void setResponse(MockHttpServletResponse response) {
254 		this.response = response;
255 	}
256 
257 	public Model getUiModel() {
258 		return uiModel;
259 	}
260 
261 	public void setUiModel(Model uiModel) {
262 		this.uiModel = uiModel;
263 	}
264 
265 	public ConfigParamService getConfigParamService() {
266 		return configParamService;
267 	}
268 
269 	public void setConfigParamService(ConfigParamService configParamService) {
270 		this.configParamService = configParamService;
271 	}
272 
273 	public GroupDao getGroupDao() {
274 		return groupDao;
275 	}
276 
277 	public void setGroupDao(GroupDao groupDao) {
278 		this.groupDao = groupDao;
279 	}
280 }