1
2
3
4
5
6
7
8
9
10
11
12
13
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
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 }