1 /*
2 * Copyright 2006-2011 The Kuali Foundation
3 *
4 * Licensed under the Educational Community License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.opensource.org/licenses/ecl2.php
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package org.kuali.rice.krad.document;
17
18 import org.junit.Ignore;
19 import org.junit.Test;
20 import org.kuali.test.KRADTestCase;
21
22 @Ignore
23 public class DocumentAuthorizerBaseTest extends KRADTestCase {
24 // TODO rewrite this test
25 // private static final Logger LOG = Logger.getLogger(DocumentAuthorizerBaseTest.class);
26 //
27 // private static final String SUPERVISOR_USER = "ABNEY";
28 // private static final String SUPERVISOR_UNIVERSAL = "2237202707";
29 // private static final String NONSUPER_USER = "BARTH";
30 // private static final String NONSUPER_UNIVERSAL = "5998202207";
31 // private static final String NONSUPER_2_USER = "COOTER";
32 // private static final String NONSUPER_2_UNIVERSAL = "598746310";
33 //
34 // private DocumentAuthorizer documentAuthorizer;
35 // private PessimisticLockService pessimisticLock;
36 //
37 // @Override
38 // public void setUp() throws Exception {
39 // super.setUp();
40 // documentAuthorizer = new DocumentAuthorizerBase();
41 // pessimisticLock = KRADServiceLocatorInternal.getPessimisticLockService();
42 // }
43 //
44 // @Override
45 // public void tearDown() throws Exception {
46 // try {
47 // new ClearDatabaseLifecycle(Arrays.asList(new String[]{"KNS_PESSIMISTIC_LOCK_T"}), null).start();
48 // } catch (Exception e) {
49 // LOG.warn("Caught exception trying to clear Pessimistic Lock table");
50 // }
51 // super.tearDown();
52 // }
53 //
54 // // following is the Supervisor & Initiator grid
55 //
56 // // ## Supervisor? UserIsInitiator? ApprovalRequested? canSupervise Result
57 // // -----------------------------------------------------------------------------------
58 // // A true true true true
59 // //
60 // // B true true false false
61 // //
62 // // C true false true true
63 // //
64 // // D true false false true
65 // //
66 // // E false * * false
67 // //
68
69 /* This test can no longer use mock objects because the isSupervisor() method is no longer on the Person object.
70 * To check for supervisor status you know must to through the group service and check membership in the supervisor group.
71 */
72 @Test
73 public void testCanSuperviseAsInitiatorA() {
74 //
75 // DocumentActionFlags flags;
76 // Document document;
77 //
78 // // scenario A
79 // //document = new MockDocument(getSuperUser(), true);
80 // //flags = documentAuthorizer.getDocumentActionFlags(document, getSuperUser());
81 // //assertTrue(flags.getCanSupervise());
82 //
83 // // scenario B
84 // document = new MockDocument(getSuperUser(), false);
85 // flags = documentAuthorizer.getDocumentActionFlags(document, getSuperUser());
86 // assertFalse(flags.getCanSupervise());
87 //
88 // // scenario C
89 // document = new MockDocument(getNonSuperUser(), true);
90 // flags = documentAuthorizer.getDocumentActionFlags(document, getSuperUser());
91 // assertTrue(flags.getCanSupervise());
92 //
93 // // scenario D
94 // document = new MockDocument(getNonSuperUser(), false);
95 // flags = documentAuthorizer.getDocumentActionFlags(document, getSuperUser());
96 // assertTrue(flags.getCanSupervise());
97 //
98 }
99
100 //
101 // private void verifyEditModeExists(Map editMode, String editModeToTest, String expectedValue) {
102 // assertNotNull("Edit mode map should have a valid value for " + editModeToTest, editMode.get(editModeToTest));
103 // assertEquals("Edit mode map should contain entry with key '" + editModeToTest + "' and value '" + expectedValue + "'", expectedValue, editMode.get(editModeToTest));
104 // }
105 //
106 // private void verifyEditModeDoesNotExist(Map editMode, String editModeToTest) {
107 // assertNull("Edit mode map should not have an entry for " + editModeToTest, editMode.get(editModeToTest));
108 // }
109 //
110 // protected Person getWorkflowPessimisticLockOwnerUser() {
111 // Person person = KIMServiceLocatorInternal.getPersonService().getPersonByPrincipalName(KNSConstants.SYSTEM_USER);
112 // if (person == null) {
113 // throw new RuntimeException("Cannot find user with network id '" + KNSConstants.SYSTEM_USER);
114 // }
115 // return person;
116 // }
117 //
118 // /**
119 // * This method tests the Pessimistic locking mechanism when no custom lock descriptors are being used by the document in
120 // * the default manner (locks are unique to user and document)
121 // *
122 // * @throws Exception
123 // */
124 @Test
125 public void testEstablishLocks_DefaultDocumentAuthorizerBase() throws Exception {
126 // PessimisticLockService lockService = KRADServiceLocatorInternal.getPessimisticLockService();
127 //
128 // // test no lock creation needed
129 // Document document = new MockDocument(getNonSuperUser(), false);
130 // int originalExpectedLockCount = 0;
131 // // no lock should be created
132 // int expectedLockCountIncrease = 0;
133 // assertEquals("Lock count is incorrect", originalExpectedLockCount, document.getPessimisticLocks().size());
134 // Map oldEditMode = getEditMode_ReadOnly();
135 // String testString = "dummyString";
136 // oldEditMode.put(AuthorizationConstants.EditMode.UNVIEWABLE, testString);
137 // Map newEditMode = this.pessimisticLock.establishLocks(document, oldEditMode, getNonSuperUser());
138 // assertEquals("Lock count is incorrect", originalExpectedLockCount + expectedLockCountIncrease, document.getPessimisticLocks().size());
139 // assertEquals("Establish locks method returned invalid number of edit modes", oldEditMode.size(), newEditMode.size());
140 // verifyEditModeDoesNotExist(newEditMode, AuthorizationConstants.EditMode.FULL_ENTRY);
141 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.VIEW_ONLY, DocumentAuthorizerBase.EDIT_MODE_DEFAULT_TRUE_VALUE);
142 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.UNVIEWABLE, testString);
143 //
144 // // test valid lock creation where no user has any locks and edit modes returned are same as passed in
145 // document = new MockDocument(getNonSuperUser(), false);
146 // originalExpectedLockCount = 0;
147 // // one lock should be created
148 // expectedLockCountIncrease = 1;
149 // assertEquals("Lock count is incorrect", originalExpectedLockCount, document.getPessimisticLocks().size());
150 // oldEditMode = getEditMode_FullEntry();
151 // testString = "dummyString";
152 // oldEditMode.put(AuthorizationConstants.EditMode.UNVIEWABLE, testString);
153 // newEditMode = this.pessimisticLock.establishLocks(document, oldEditMode, getNonSuperUser());
154 // assertEquals("Lock count is incorrect", originalExpectedLockCount + expectedLockCountIncrease, document.getPessimisticLocks().size());
155 // assertEquals("Establish locks method returned invalid number of edit modes", oldEditMode.size(), newEditMode.size());
156 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.FULL_ENTRY, DocumentAuthorizerBase.EDIT_MODE_DEFAULT_TRUE_VALUE);
157 // verifyEditModeDoesNotExist(newEditMode, AuthorizationConstants.EditMode.VIEW_ONLY);
158 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.UNVIEWABLE, testString);
159 //
160 // // test invalid lock status (2 locks by 2 different users) throws exception
161 // document = new MockDocument(getNonSuperUser(), false);
162 // document.addPessimisticLock(lockService.generateNewLock(document.getDocumentNumber(), getNonSuperUser()));
163 // document.addPessimisticLock(lockService.generateNewLock(document.getDocumentNumber(), getSuperUser()));
164 // try {
165 // this.pessimisticLock.establishLocks(document, getEditMode_FullEntry(), getNonSuperUser());
166 // fail("Document authorizer should have thrown exception of type PessimisticLockingException");
167 // } catch (PessimisticLockingException e) {
168 // // expected result
169 // } catch (Exception e) {
170 // fail("Document authorizer threw an exception but it was not of type PessimisticLockingException... it was a " + e.getClass().getName());
171 // }
172 //
173 // // test valid lock status (2 locks by 2 different users with one user being workflow lock user) does not throw
174 // // exception
175 // document = new MockDocument(getNonSuperUser(), false);
176 // document.addPessimisticLock(lockService.generateNewLock(document.getDocumentNumber(), getNonSuperUser()));
177 // document.addPessimisticLock(lockService.generateNewLock(document.getDocumentNumber(), getWorkflowPessimisticLockOwnerUser()));
178 // try {
179 // this.pessimisticLock.establishLocks(document, getEditMode_FullEntry(), getNonSuperUser());
180 // } catch (Exception e) {
181 // fail("Document authorizer should not have thrown an exception but did with type '" + e.getClass().getName() + "' and message: " + e.getMessage());
182 // }
183 //
184 // // test other user already has lock should return editMode of ReadOnly
185 // document = new MockDocument(getNonSuperUser(), false);
186 // document.addPessimisticLock(lockService.generateNewLock(document.getDocumentNumber(), getSuperUser()));
187 // originalExpectedLockCount = 1;
188 // // one lock should be created
189 // expectedLockCountIncrease = 0;
190 // assertEquals("Lock count is incorrect", originalExpectedLockCount, document.getPessimisticLocks().size());
191 // oldEditMode = getEditMode_FullEntry();
192 // testString = "dummyString";
193 // oldEditMode.put(AuthorizationConstants.EditMode.UNVIEWABLE, testString);
194 // newEditMode = this.pessimisticLock.establishLocks(document, oldEditMode, getNonSuperUser());
195 // assertEquals("Lock count is incorrect", originalExpectedLockCount + expectedLockCountIncrease, document.getPessimisticLocks().size());
196 // assertEquals("Establish locks method returned invalid number of edit modes", oldEditMode.size(), newEditMode.size());
197 // verifyEditModeDoesNotExist(newEditMode, AuthorizationConstants.EditMode.FULL_ENTRY);
198 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.VIEW_ONLY, DocumentAuthorizerBase.EDIT_MODE_DEFAULT_TRUE_VALUE);
199 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.UNVIEWABLE, testString);
200 //
201 // // test current user already has lock and that edit modes returned are same as passed in
202 // document = new MockDocument(getNonSuperUser(), false);
203 // document.addPessimisticLock(lockService.generateNewLock(document.getDocumentNumber(), getNonSuperUser()));
204 // originalExpectedLockCount = 1;
205 // // one lock should be created
206 // expectedLockCountIncrease = 0;
207 // assertEquals("Lock count is incorrect", originalExpectedLockCount, document.getPessimisticLocks().size());
208 // oldEditMode = getEditMode_FullEntry();
209 // testString = "dummyString";
210 // oldEditMode.put(AuthorizationConstants.EditMode.VIEW_ONLY, testString);
211 // newEditMode = this.pessimisticLock.establishLocks(document, oldEditMode, getNonSuperUser());
212 // assertEquals("Lock count is incorrect", originalExpectedLockCount + expectedLockCountIncrease, document.getPessimisticLocks().size());
213 // assertEquals("Establish locks method returned invalid number of edit modes", oldEditMode.size(), newEditMode.size());
214 // verifyEditModeDoesNotExist(newEditMode, AuthorizationConstants.EditMode.UNVIEWABLE);
215 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.FULL_ENTRY, DocumentAuthorizerBase.EDIT_MODE_DEFAULT_TRUE_VALUE);
216 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.VIEW_ONLY, testString);
217 //
218 }
219 //
220 // /**
221 // * This method tests the Pessimistic locking mechanism when custom lock descriptors are being used by the document in the
222 // * default manner (locks are unique to user, document, and lock descriptor)
223 // *
224 // * @throws Exception
225 // */
226 @Test
227 public void testEstablishLocks_CustomDocumentAuthorizerBase() throws Exception {
228 // GlobalVariables.setUserSession(new UserSession("quickstart"));
229 // PessimisticLockService lockService = KRADServiceLocatorInternal.getPessimisticLockService();
230 // DocumentAuthorizer documentAuthorizer = new TestDocumentAuthorizerBase();
231 // String lockDescriptor1 = "test the first lock";
232 // String lockDescriptor2 = "this is the second lock";
233 // String lockDescriptor3 = "booyah locks";
234 //
235 // // test no lock creation needed
236 // Document document = new MockDocument(getNonSuperUser(), false);
237 // String expectedLockDescriptor = lockDescriptor1;
238 // GlobalVariables.getUserSession().addObject(TestDocumentAuthorizerBase.USER_SESSION_OBJECT_KEY, (Object) expectedLockDescriptor);
239 // int originalExpectedLockCount = 0;
240 // // no lock should be created
241 // int expectedLockCountIncrease = 0;
242 // assertEquals("Lock count is incorrect", originalExpectedLockCount, document.getPessimisticLocks().size());
243 // Map oldEditMode = getEditMode_ReadOnly();
244 // String testString = "dummyString";
245 // oldEditMode.put(AuthorizationConstants.EditMode.UNVIEWABLE, testString);
246 // Map newEditMode = this.pessimisticLock.establishLocks(document, oldEditMode, getNonSuperUser());
247 // assertEquals("Lock count is incorrect", originalExpectedLockCount + expectedLockCountIncrease, document.getPessimisticLocks().size());
248 // assertEquals("Establish locks method returned invalid number of edit modes", oldEditMode.size(), newEditMode.size());
249 // verifyEditModeDoesNotExist(newEditMode, AuthorizationConstants.EditMode.FULL_ENTRY);
250 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.VIEW_ONLY, DocumentAuthorizerBase.EDIT_MODE_DEFAULT_TRUE_VALUE);
251 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.UNVIEWABLE, testString);
252 //
253 // // test lock descriptors nullify PessimisticLockingException throwing
254 // document = new MockDocument(getNonSuperUser(), false);
255 // expectedLockDescriptor = lockDescriptor3;
256 // GlobalVariables.getUserSession().addObject(TestDocumentAuthorizerBase.USER_SESSION_OBJECT_KEY, (Object) expectedLockDescriptor);
257 // document.addPessimisticLock(lockService.generateNewLock(document.getDocumentNumber(), lockDescriptor1, getNonSuperUser()));
258 // document.addPessimisticLock(lockService.generateNewLock(document.getDocumentNumber(), lockDescriptor2, getSuperUser()));
259 // try {
260 // this.pessimisticLock.establishLocks(document, getEditMode_FullEntry(), getNonSuperUser());
261 // } catch (Exception e) {
262 // fail("Document authorizer should not have thrown an exception but did with type '" + e.getClass().getName() + "' and message: " + e.getMessage());
263 // }
264 //
265 // // test valid lock status (2 locks by 2 different users with one user being workflow lock user) does not throw
266 // // exception
267 // document = new MockDocument(getNonSuperUser(), false);
268 // expectedLockDescriptor = lockDescriptor3;
269 // GlobalVariables.getUserSession().addObject(TestDocumentAuthorizerBase.USER_SESSION_OBJECT_KEY, (Object) expectedLockDescriptor);
270 // document.addPessimisticLock(lockService.generateNewLock(document.getDocumentNumber(), lockDescriptor1, getNonSuperUser()));
271 // document.addPessimisticLock(lockService.generateNewLock(document.getDocumentNumber(), lockDescriptor2, getWorkflowPessimisticLockOwnerUser()));
272 // try {
273 // //documentAuthorizer.establishLocks(document, getEditMode_FullEntry(), getNonSuperUser());
274 // this.pessimisticLock.establishLocks(document,getEditMode_FullEntry(), getNonSuperUser());
275 // } catch (Exception e) {
276 // fail("Document authorizer should not have thrown an exception but did with type '" + e.getClass().getName() + "' and message: " + e.getMessage());
277 // }
278 //
279 // // test valid lock creation with descriptor where no user has any locks and edit modes returned are same as passed in
280 // document = new MockDocument(getNonSuperUser(), false);
281 // expectedLockDescriptor = lockDescriptor3;
282 // GlobalVariables.getUserSession().addObject(TestDocumentAuthorizerBase.USER_SESSION_OBJECT_KEY, (Object) expectedLockDescriptor);
283 // originalExpectedLockCount = 0;
284 // // one lock should be created
285 // expectedLockCountIncrease = 1;
286 // assertEquals("Lock count is incorrect", originalExpectedLockCount, document.getPessimisticLocks().size());
287 // oldEditMode = getEditMode_FullEntry();
288 // testString = "dummyString";
289 // oldEditMode.put(AuthorizationConstants.EditMode.UNVIEWABLE, testString);
290 // newEditMode = this.pessimisticLock.establishLocks(document, oldEditMode, getNonSuperUser());
291 // assertEquals("Lock count is incorrect", originalExpectedLockCount + expectedLockCountIncrease, document.getPessimisticLocks().size());
292 // assertEquals("Lock descriptor from new lock is incorrect", expectedLockDescriptor, document.getPessimisticLocks().get(0).getLockDescriptor());
293 // assertEquals("Establish locks method returned invalid number of edit modes", oldEditMode.size(), newEditMode.size());
294 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.FULL_ENTRY, DocumentAuthorizerBase.EDIT_MODE_DEFAULT_TRUE_VALUE);
295 // verifyEditModeDoesNotExist(newEditMode, AuthorizationConstants.EditMode.VIEW_ONLY);
296 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.UNVIEWABLE, testString);
297 //
298 // // test other user already has lock with same descriptor should return editMode of ReadOnly
299 // document = new MockDocument(getNonSuperUser(), false);
300 // expectedLockDescriptor = lockDescriptor1;
301 // GlobalVariables.getUserSession().addObject(TestDocumentAuthorizerBase.USER_SESSION_OBJECT_KEY, (Object) expectedLockDescriptor);
302 // document.addPessimisticLock(lockService.generateNewLock(document.getDocumentNumber(), lockDescriptor1, getSuperUser()));
303 // originalExpectedLockCount = 1;
304 // // no lock should be created
305 // expectedLockCountIncrease = 0;
306 // assertEquals("Lock count is incorrect", originalExpectedLockCount, document.getPessimisticLocks().size());
307 // oldEditMode = getEditMode_FullEntry();
308 // testString = "dummyString";
309 // oldEditMode.put(AuthorizationConstants.EditMode.UNVIEWABLE, testString);
310 // newEditMode = this.pessimisticLock.establishLocks(document, oldEditMode, getNonSuperUser());
311 // assertEquals("Lock count is incorrect", originalExpectedLockCount + expectedLockCountIncrease, document.getPessimisticLocks().size());
312 // assertEquals("Establish locks method returned invalid number of edit modes", oldEditMode.size(), newEditMode.size());
313 // verifyEditModeDoesNotExist(newEditMode, AuthorizationConstants.EditMode.FULL_ENTRY);
314 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.VIEW_ONLY, DocumentAuthorizerBase.EDIT_MODE_DEFAULT_TRUE_VALUE);
315 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.UNVIEWABLE, testString);
316 // assertNotNull("Establish locks should return a UNVIEWABLE edit mode", newEditMode.get(AuthorizationConstants.EditMode.UNVIEWABLE));
317 // assertEquals("Establish locks method returned invalid UNVIEWABLE edit mode", testString, newEditMode.get(AuthorizationConstants.EditMode.UNVIEWABLE));
318 //
319 // // test other user already has lock with different descriptor should return given edit modes
320 // document = new MockDocument(getNonSuperUser(), false);
321 // expectedLockDescriptor = lockDescriptor1;
322 // GlobalVariables.getUserSession().addObject(TestDocumentAuthorizerBase.USER_SESSION_OBJECT_KEY, (Object) expectedLockDescriptor);
323 // PessimisticLock oldLock = lockService.generateNewLock(document.getDocumentNumber(), lockDescriptor2, getNonSuperUser());
324 // document.addPessimisticLock(oldLock);
325 // originalExpectedLockCount = 1;
326 // // one lock should be created
327 // expectedLockCountIncrease = 1;
328 // assertEquals("Lock count is incorrect", originalExpectedLockCount, document.getPessimisticLocks().size());
329 // oldEditMode = getEditMode_FullEntry();
330 // testString = "is this the string";
331 // oldEditMode.put(AuthorizationConstants.EditMode.UNVIEWABLE, testString);
332 // newEditMode = this.pessimisticLock.establishLocks(document, oldEditMode, getNonSuperUser());
333 // assertEquals("Lock count is incorrect", originalExpectedLockCount + expectedLockCountIncrease, document.getPessimisticLocks().size());
334 // for (PessimisticLock lock : document.getPessimisticLocks()) {
335 // if (!lock.getId().equals(oldLock.getId())) {
336 // assertEquals("Lock descriptor of new lock is incorrect", expectedLockDescriptor, lock.getLockDescriptor());
337 // }
338 // }
339 // assertEquals("Establish locks method returned invalid number of edit modes", oldEditMode.size(), newEditMode.size());
340 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.FULL_ENTRY, DocumentAuthorizerBase.EDIT_MODE_DEFAULT_TRUE_VALUE);
341 // verifyEditModeDoesNotExist(newEditMode, AuthorizationConstants.EditMode.VIEW_ONLY);
342 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.UNVIEWABLE, testString);
343 //
344 // // test current user has lock with same lock descriptor and other users have no locks should return given edit modes
345 // document = new MockDocument(getNonSuperUser(), false);
346 // expectedLockDescriptor = lockDescriptor1;
347 // GlobalVariables.getUserSession().addObject(TestDocumentAuthorizerBase.USER_SESSION_OBJECT_KEY, (Object) expectedLockDescriptor);
348 // document.addPessimisticLock(lockService.generateNewLock(document.getDocumentNumber(), expectedLockDescriptor, getNonSuperUser()));
349 // originalExpectedLockCount = 1;
350 // // no lock should be created
351 // expectedLockCountIncrease = 0;
352 // assertEquals("Lock count is incorrect", originalExpectedLockCount, document.getPessimisticLocks().size());
353 // oldEditMode = getEditMode_FullEntry();
354 // testString = "is this the string";
355 // oldEditMode.put(AuthorizationConstants.EditMode.UNVIEWABLE, testString);
356 // newEditMode = this.pessimisticLock.establishLocks(document, oldEditMode, getNonSuperUser());
357 // assertEquals("Lock count is incorrect", originalExpectedLockCount + expectedLockCountIncrease, document.getPessimisticLocks().size());
358 // assertEquals("Establish locks method returned invalid number of edit modes", oldEditMode.size(), newEditMode.size());
359 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.FULL_ENTRY, DocumentAuthorizerBase.EDIT_MODE_DEFAULT_TRUE_VALUE);
360 // verifyEditModeDoesNotExist(newEditMode, AuthorizationConstants.EditMode.VIEW_ONLY);
361 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.UNVIEWABLE, testString);
362 //
363 // // test current user has lock with different lock descriptor and other users have no locks should return given edit
364 // // modes
365 // document = new MockDocument(getNonSuperUser(), false);
366 // expectedLockDescriptor = lockDescriptor1;
367 // GlobalVariables.getUserSession().addObject(TestDocumentAuthorizerBase.USER_SESSION_OBJECT_KEY, (Object) expectedLockDescriptor);
368 // oldLock = lockService.generateNewLock(document.getDocumentNumber(), lockDescriptor3, getNonSuperUser());
369 // document.addPessimisticLock(oldLock);
370 // originalExpectedLockCount = 1;
371 // // one lock should be created
372 // expectedLockCountIncrease = 1;
373 // assertEquals("Lock count is incorrect", originalExpectedLockCount, document.getPessimisticLocks().size());
374 // oldEditMode = getEditMode_FullEntry();
375 // testString = "is this the string";
376 // oldEditMode.put(AuthorizationConstants.EditMode.VIEW_ONLY, testString);
377 // newEditMode = this.pessimisticLock.establishLocks(document, oldEditMode, getNonSuperUser());
378 // assertEquals("Lock count is incorrect", originalExpectedLockCount + expectedLockCountIncrease, document.getPessimisticLocks().size());
379 // for (PessimisticLock lock : document.getPessimisticLocks()) {
380 // if (!lock.getId().equals(oldLock.getId())) {
381 // assertEquals("Lock descriptor of new lock is incorrect", expectedLockDescriptor, lock.getLockDescriptor());
382 // }
383 // }
384 // assertEquals("Establish locks method returned invalid number of edit modes", oldEditMode.size(), newEditMode.size());
385 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.FULL_ENTRY, DocumentAuthorizerBase.EDIT_MODE_DEFAULT_TRUE_VALUE);
386 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.VIEW_ONLY, testString);
387 // verifyEditModeDoesNotExist(newEditMode, AuthorizationConstants.EditMode.UNVIEWABLE);
388 //
389 // // test invalid lock status (2 locks with same lock descriptor by 2 different users) throws exception
390 // document = new MockDocument(getNonSuperUser(), false);
391 // expectedLockDescriptor = lockDescriptor3;
392 // GlobalVariables.getUserSession().addObject(TestDocumentAuthorizerBase.USER_SESSION_OBJECT_KEY, (Object) expectedLockDescriptor);
393 // document.addPessimisticLock(lockService.generateNewLock(document.getDocumentNumber(), lockDescriptor1, getNonSuperUser()));
394 // document.addPessimisticLock(lockService.generateNewLock(document.getDocumentNumber(), lockDescriptor3, getSecondNonSuperUser()));
395 // document.addPessimisticLock(lockService.generateNewLock(document.getDocumentNumber(), lockDescriptor1, getSuperUser()));
396 // try {
397 // this.pessimisticLock.establishLocks(document, getEditMode_FullEntry(), getNonSuperUser());
398 // fail("Document authorizer should have thrown exception of type PessimisticLockingException");
399 // } catch (PessimisticLockingException e) {
400 // // expected result
401 // } catch (Exception e) {
402 // fail("Document authorizer threw an exception but it was not of type PessimisticLockingException... it was a " + e.getClass().getName());
403 // }
404 //
405 // // test valid lock status (2 locks by 2 different users with one user being workflow lock user) does not throw
406 // // exception
407 // document = new MockDocument(getNonSuperUser(), false);
408 // expectedLockDescriptor = lockDescriptor3;
409 // GlobalVariables.getUserSession().addObject(TestDocumentAuthorizerBase.USER_SESSION_OBJECT_KEY, (Object) expectedLockDescriptor);
410 // Person user = getWorkflowPessimisticLockOwnerUser();
411 // document.addPessimisticLock(lockService.generateNewLock(document.getDocumentNumber(), lockDescriptor3, user));
412 // document.addPessimisticLock(lockService.generateNewLock(document.getDocumentNumber(), lockDescriptor1, getSuperUser()));
413 // try {
414 // this.pessimisticLock.establishLocks(document, getEditMode_FullEntry(), getNonSuperUser());
415 // } catch (Exception e) {
416 // fail("Document authorizer should not have thrown an exception but did with type '" + e.getClass().getName() + "' and message: " + e.getMessage());
417 // }
418 //
419 // // test current user has lock with different descriptor and other users have locks with same descriptors should
420 // // return read only editmodes
421 // document = new MockDocument(getNonSuperUser(), false);
422 // expectedLockDescriptor = lockDescriptor3;
423 // GlobalVariables.getUserSession().addObject(TestDocumentAuthorizerBase.USER_SESSION_OBJECT_KEY, (Object) expectedLockDescriptor);
424 // document.addPessimisticLock(lockService.generateNewLock(document.getDocumentNumber(), lockDescriptor1, getNonSuperUser()));
425 // document.addPessimisticLock(lockService.generateNewLock(document.getDocumentNumber(), lockDescriptor3, getSuperUser()));
426 // document.addPessimisticLock(lockService.generateNewLock(document.getDocumentNumber(), lockDescriptor2, getSecondNonSuperUser()));
427 // originalExpectedLockCount = 3;
428 // // no lock should be created
429 // expectedLockCountIncrease = 0;
430 // assertEquals("Lock count is incorrect", originalExpectedLockCount, document.getPessimisticLocks().size());
431 // oldEditMode = getEditMode_FullEntry();
432 // testString = "is this the string";
433 // oldEditMode.put(AuthorizationConstants.EditMode.UNVIEWABLE, testString);
434 // newEditMode = this.pessimisticLock.establishLocks(document, oldEditMode, getNonSuperUser());
435 // assertEquals("Lock count is incorrect", originalExpectedLockCount + expectedLockCountIncrease, document.getPessimisticLocks().size());
436 // assertEquals("Establish locks method returned invalid number of edit modes", oldEditMode.size(), newEditMode.size());
437 // verifyEditModeDoesNotExist(newEditMode, AuthorizationConstants.EditMode.FULL_ENTRY);
438 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.VIEW_ONLY, DocumentAuthorizerBase.EDIT_MODE_DEFAULT_TRUE_VALUE);
439 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.UNVIEWABLE, testString);
440 //
441 // // test current user has lock with same descriptor and other users have locks with different descriptors should
442 // // return given editmodes
443 // document = new MockDocument(getNonSuperUser(), false);
444 // expectedLockDescriptor = lockDescriptor3;
445 // GlobalVariables.getUserSession().addObject(TestDocumentAuthorizerBase.USER_SESSION_OBJECT_KEY, (Object) expectedLockDescriptor);
446 // document.addPessimisticLock(lockService.generateNewLock(document.getDocumentNumber(), expectedLockDescriptor, getNonSuperUser()));
447 // document.addPessimisticLock(lockService.generateNewLock(document.getDocumentNumber(), lockDescriptor1, getSuperUser()));
448 // document.addPessimisticLock(lockService.generateNewLock(document.getDocumentNumber(), lockDescriptor2, getSecondNonSuperUser()));
449 // originalExpectedLockCount = 3;
450 // // no lock should be created
451 // expectedLockCountIncrease = 0;
452 // assertEquals("Lock count is incorrect", originalExpectedLockCount, document.getPessimisticLocks().size());
453 // oldEditMode = getEditMode_FullEntry();
454 // testString = "is this the string";
455 // oldEditMode.put(AuthorizationConstants.EditMode.UNVIEWABLE, testString);
456 // newEditMode = this.pessimisticLock.establishLocks(document, oldEditMode, getNonSuperUser());
457 // assertEquals("Lock count is incorrect", originalExpectedLockCount + expectedLockCountIncrease, document.getPessimisticLocks().size());
458 // assertEquals("Establish locks method returned invalid number of edit modes", oldEditMode.size(), newEditMode.size());
459 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.FULL_ENTRY, DocumentAuthorizerBase.EDIT_MODE_DEFAULT_TRUE_VALUE);
460 // verifyEditModeDoesNotExist(newEditMode, AuthorizationConstants.EditMode.VIEW_ONLY);
461 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.UNVIEWABLE, testString);
462 //
463 // // test current user has lock with different lock descriptor and other users have locks with different lock
464 // // descriptor should return given edit modes
465 // document = new MockDocument(getNonSuperUser(), false);
466 // expectedLockDescriptor = lockDescriptor1;
467 // List<Long> existingLockIds = new ArrayList<Long>();
468 // GlobalVariables.getUserSession().addObject(TestDocumentAuthorizerBase.USER_SESSION_OBJECT_KEY, (Object) expectedLockDescriptor);
469 // oldLock = lockService.generateNewLock(document.getDocumentNumber(), lockDescriptor3, getSecondNonSuperUser());
470 // existingLockIds.add(oldLock.getId());
471 // document.addPessimisticLock(oldLock);
472 // oldLock = lockService.generateNewLock(document.getDocumentNumber(), lockDescriptor2, getSecondNonSuperUser());
473 // existingLockIds.add(oldLock.getId());
474 // document.addPessimisticLock(oldLock);
475 // oldLock = lockService.generateNewLock(document.getDocumentNumber(), lockDescriptor3, getSuperUser());
476 // existingLockIds.add(oldLock.getId());
477 // document.addPessimisticLock(oldLock);
478 // originalExpectedLockCount = existingLockIds.size();
479 // // one lock should be created
480 // expectedLockCountIncrease = 1;
481 // assertEquals("Lock count is incorrect", originalExpectedLockCount, document.getPessimisticLocks().size());
482 // oldEditMode = getEditMode_FullEntry();
483 // testString = "is this the string";
484 // oldEditMode.put(AuthorizationConstants.EditMode.VIEW_ONLY, testString);
485 // newEditMode = this.pessimisticLock.establishLocks(document, oldEditMode, getNonSuperUser());
486 // assertEquals("Lock count is incorrect", originalExpectedLockCount + expectedLockCountIncrease, document.getPessimisticLocks().size());
487 // for (PessimisticLock lock : document.getPessimisticLocks()) {
488 // if (!existingLockIds.contains(lock.getId())) {
489 // // this must be the newly created lock
490 // assertEquals("Lock descriptor of new lock is incorrect", expectedLockDescriptor, lock.getLockDescriptor());
491 // }
492 // }
493 // assertEquals("Establish locks method returned invalid number of edit modes", oldEditMode.size(), newEditMode.size());
494 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.FULL_ENTRY, DocumentAuthorizerBase.EDIT_MODE_DEFAULT_TRUE_VALUE);
495 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.VIEW_ONLY, testString);
496 // verifyEditModeDoesNotExist(newEditMode, AuthorizationConstants.EditMode.UNVIEWABLE);
497 //
498 // // test current user has lock with wrong descriptor and no entry edit modes return given editmodes
499 // document = new MockDocument(getNonSuperUser(), false);
500 // expectedLockDescriptor = lockDescriptor3;
501 // GlobalVariables.getUserSession().addObject(TestDocumentAuthorizerBase.USER_SESSION_OBJECT_KEY, (Object) expectedLockDescriptor);
502 // document.addPessimisticLock(lockService.generateNewLock(document.getDocumentNumber(), lockDescriptor1, getNonSuperUser()));
503 // document.addPessimisticLock(lockService.generateNewLock(document.getDocumentNumber(), lockDescriptor3, getSuperUser()));
504 // document.addPessimisticLock(lockService.generateNewLock(document.getDocumentNumber(), lockDescriptor2, getSecondNonSuperUser()));
505 // originalExpectedLockCount = 3;
506 // // no lock should be created
507 // expectedLockCountIncrease = 0;
508 // assertEquals("Lock count is incorrect", originalExpectedLockCount, document.getPessimisticLocks().size());
509 // oldEditMode = getEditMode_ReadOnly();
510 // testString = "is this the string";
511 // oldEditMode.put(AuthorizationConstants.EditMode.UNVIEWABLE, testString);
512 // newEditMode = this.pessimisticLock.establishLocks(document, oldEditMode, getNonSuperUser());
513 // assertEquals("Lock count is incorrect", originalExpectedLockCount + expectedLockCountIncrease, document.getPessimisticLocks().size());
514 // assertEquals("Establish locks method returned invalid number of edit modes", oldEditMode.size(), newEditMode.size());
515 // verifyEditModeDoesNotExist(newEditMode, AuthorizationConstants.EditMode.FULL_ENTRY);
516 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.VIEW_ONLY, DocumentAuthorizerBase.EDIT_MODE_DEFAULT_TRUE_VALUE);
517 // verifyEditModeExists(newEditMode, AuthorizationConstants.EditMode.UNVIEWABLE, testString);
518 }
519 //
520 @Test
521 public void testHasPreRouteEditAuthorization() throws Exception {
522 // //TODO: the test for preRouteEditAuthorization should be removed
523 // GlobalVariables.setUserSession(new UserSession("quickstart"));
524 // PessimisticLockTestDocumentAuthorizer lockDocumentAuthorizer = new PessimisticLockTestDocumentAuthorizer();
525 // lockDocumentAuthorizer.USES_PESSIMISTIC_LOCKING = false;
526 //
527 // Person initiatorUser = getNonSuperUser();
528 // Person authorizerUser = getNonSuperUser();
529 // Document document = new MockDocument(initiatorUser, false);
530 // assertTrue(authorizerUser + " should have Initiate Authorization due to initator being " + initiatorUser, lockDocumentAuthorizer.hasInitiateAuthorization(document, authorizerUser));
531 // //assertTrue(authorizerUser + " should have Pre Route Edit Authorization", lockDocumentAuthorizer.hasPreRouteEditAuthorization(document, authorizerUser));
532 //
533 // initiatorUser = getNonSuperUser();
534 // authorizerUser = getSuperUser();
535 // document = new MockDocument(initiatorUser, false);
536 // assertFalse(authorizerUser + " should not have Initiate Authorization due to initator being " + initiatorUser, lockDocumentAuthorizer.hasInitiateAuthorization(document, authorizerUser));
537 // //assertFalse(authorizerUser + " should not have Pre Route Edit Authorization", lockDocumentAuthorizer.hasPreRouteEditAuthorization(document, authorizerUser));
538 //
539 // // switch to using pessimistic locking for the next tests
540 // lockDocumentAuthorizer.USES_PESSIMISTIC_LOCKING = true;
541 //
542 // initiatorUser = getNonSuperUser();
543 // authorizerUser = getSuperUser();
544 // document = new MockDocument(initiatorUser, false);
545 // assertFalse(authorizerUser + " should not have Initiate Authorization due to initator being " + initiatorUser, lockDocumentAuthorizer.hasInitiateAuthorization(document, authorizerUser));
546 // //assertFalse(authorizerUser + " should not have Pre Route Edit Authorization", lockDocumentAuthorizer.hasPreRouteEditAuthorization(document, authorizerUser));
547 //
548 // initiatorUser = getNonSuperUser();
549 // authorizerUser = getNonSuperUser();
550 // document = new MockDocument(initiatorUser, false);
551 // document.addPessimisticLock(KRADServiceLocatorInternal.getPessimisticLockService().generateNewLock(document.getDocumentNumber(), getSecondNonSuperUser()));
552 // assertTrue(authorizerUser + " should have Initiate Authorization due to initator being " + initiatorUser, lockDocumentAuthorizer.hasInitiateAuthorization(document, authorizerUser));
553 // //assertFalse(authorizerUser + " should not have Pre Route Edit Authorization", lockDocumentAuthorizer.hasPreRouteEditAuthorization(document, authorizerUser));
554 //
555 // initiatorUser = getNonSuperUser();
556 // authorizerUser = getNonSuperUser();
557 // document = new MockDocument(initiatorUser, false);
558 // document.addPessimisticLock(KRADServiceLocatorInternal.getPessimisticLockService().generateNewLock(document.getDocumentNumber(), authorizerUser));
559 // assertTrue(authorizerUser + " should have Initiate Authorization due to initator being " + initiatorUser, lockDocumentAuthorizer.hasInitiateAuthorization(document, authorizerUser));
560 // //assertTrue(authorizerUser + " should have Pre Route Edit Authorization", lockDocumentAuthorizer.hasPreRouteEditAuthorization(document, authorizerUser));
561 }
562 //
563 @Test
564 public void testGetDocumentActionFlagsUsingPessimisticLocking() throws Exception {
565 // GlobalVariables.setUserSession(new UserSession("quickstart"));
566 // String editModeTrueValue = "TRUE";
567 // String editModeFalseValue = "FALSE";
568 // PessimisticLockTestDocumentAuthorizer lockDocumentAuthorizer = new PessimisticLockTestDocumentAuthorizer();
569 //
570 // Person initiatorUser = getNonSuperUser();
571 // Person authorizerUser = getNonSuperUser();
572 // Document document = new MockDocument(initiatorUser, false);
573 // lockDocumentAuthorizer.USES_PESSIMISTIC_LOCKING = false;
574 // Map editMode = new HashMap();
575 // lockDocumentAuthorizer.setEditMode(MapUtils.putAll(editMode, new Map.Entry[]{new DefaultMapEntry(AuthorizationConstants.EditMode.VIEW_ONLY,"TRUE")}));
576 // DocumentFormPlaceholder formDummy = implementDocumentAuthorizerMethods(lockDocumentAuthorizer, document, new MockPerson(GlobalVariables.getUserSession().getPerson()));
577 }
578 //
579 // /**
580 // * This is a stand-in object for a {@link KualiDocumentFormBase} object
581 // */
582 // private class DocumentFormPlaceholder {
583 // public Map editingMode;
584 // public DocumentActionFlags documentActionFlags;
585 // }
586 //
587 // /**
588 // * This method is a stand-in method to duplicate the behavior of
589 // * {@link KualiDocumentFormBase#populateAuthorizationFields(DocumentAuthorizer)} and
590 // * {@link KualiDocumentFormBase#useDocumentAuthorizer(DocumentAuthorizer)}
591 // *
592 // * @param document -
593 // * document to use for edit modes and action flags
594 // * @param kualiUser -
595 // * user to use in place of what may be in GlobalVariables
596 // * @return a stand-in object for {@link KualiDocumentFormBase} that holds the edit mode map and the
597 // * {@link DocumentActionFlags} object that would be held in the {@link KualiDocumentFormBase}
598 // */
599 // private DocumentFormPlaceholder implementDocumentAuthorizerMethods(PessimisticLockTestDocumentAuthorizer documentAuthorizer, Document document, Person kualiUser) {
600 // // Person kualiUser = GlobalVariables.getUserSession().getPerson();
601 // // DocumentAuthorizer documentAuthorizer = KRADServiceLocatorInternal.getDocumentAuthorizationService().getDocumentAuthorizer(document);
602 // Map editMode = documentAuthorizer.getEditMode(document, kualiUser);
603 // if (documentAuthorizer.usesPessimisticLocking(document)) {
604 // editMode = this.pessimisticLock.establishLocks(document, editMode, kualiUser);
605 // }
606 // DocumentFormPlaceholder formPlaceholder = new DocumentFormPlaceholder();
607 // formPlaceholder.editingMode = editMode;
608 // formPlaceholder.documentActionFlags = documentAuthorizer.getDocumentActionFlags(document, kualiUser);
609 // return formPlaceholder;
610 // }
611 //
612 // private Person getSuperUser() {
613 // return new MockPerson(SUPERVISOR_UNIVERSAL, SUPERVISOR_USER, true);
614 // }
615 //
616 // private Person getNonSuperUser() {
617 // return new MockPerson(NONSUPER_UNIVERSAL, NONSUPER_USER, false);
618 // }
619 //
620 // private Person getSecondNonSuperUser() {
621 // return new MockPerson(NONSUPER_2_UNIVERSAL, NONSUPER_2_USER, false);
622 // }
623 //
624 // private Map getEditMode_ReadOnly() {
625 // return constructEditMode(AuthorizationConstants.EditMode.VIEW_ONLY);
626 // }
627 //
628 // private Map getEditMode_FullEntry() {
629 // return constructEditMode(AuthorizationConstants.EditMode.FULL_ENTRY);
630 // }
631 //
632 // private Map constructEditMode(String editModeValue) {
633 // Map editMode = new HashMap();
634 // editMode.put(editModeValue, DocumentAuthorizerBase.EDIT_MODE_DEFAULT_TRUE_VALUE);
635 // return editMode;
636 // }
637 //
638 // private class MockDocument extends DocumentBase {
639 //
640 // private MockDocument() {
641 // super();
642 // }
643 //
644 // public MockDocument(Person initiator, boolean isApprovalRequested) {
645 // this();
646 // this.documentNumber = "1234567890";
647 // getDocumentHeader().setWorkflowDocument(new MockWorkflowDocument(initiator, isApprovalRequested));
648 // }
649 //
650 // @Override
651 // protected LinkedHashMap toStringMapper() {
652 // LinkedHashMap map = new LinkedHashMap();
653 // map.put("class", "MockDocument");
654 // map.put(KNSPropertyConstants.DOCUMENT_NUMBER, documentNumber);
655 // map.put("initiator", getDocumentHeader().getWorkflowDocument().getInitiatorNetworkId());
656 // return map;
657 // }
658 //
659 // public boolean getAllowsCopy() {
660 // return false;
661 // }
662 //
663 // }
664 //
665 // private class MockWorkflowDocument extends MockWorkflowDocument {
666 //
667 // private Person initiator;
668 // private boolean approvalRequested;
669 //
670 // private MockWorkflowDocument() {};
671 //
672 // public MockWorkflowDocument(Person initiator, boolean isApprovalRequested) {
673 // this.initiator = initiator;
674 // this.approvalRequested = isApprovalRequested;
675 // }
676 //
677 // public String getInitiatorNetworkId() {
678 // return initiator.getPrincipalName();
679 // }
680 //
681 // public boolean isApprovalRequested() {
682 // return approvalRequested;
683 // }
684 //
685 // public boolean userIsInitiator(Person user) {
686 // return initiator.getPrincipalId().equalsIgnoreCase(user.getPrincipalId());
687 // }
688 //
689 // /**
690 // * This overridden method ...
691 // *
692 // * @see org.kuali.rice.krad.workflow.service.KualiWorkflowDocument#appSpecificRouteDocumentToGroup(java.lang.String, java.lang.String, int, java.lang.String, org.kuali.rice.kim.bo.group.dto.GroupInfo, java.lang.String, boolean)
693 // */
694 // public void appSpecificRouteDocumentToGroup(String actionRequested,
695 // String routeTypeName, String annotation,
696 // GroupIdDTO groupId, String responsibilityDesc,
697 // boolean forceAction) throws WorkflowException {
698 // // TODO sp20369 - THIS METHOD NEEDS JAVADOCS
699 //
700 // }
701 //
702 // }
703 //
704 // private class MockPerson extends PersonImpl {
705 // private boolean supervisor;
706 // private String principalId;
707 // private String principalName;
708 //
709 // private MockPerson() {};
710 //
711 // public MockPerson(Person user) {
712 // this(user.getPrincipalId(), user.getPrincipalName(), KimApiServiceLocator.getIdentityManagementService().isMemberOfGroup(user.getPrincipalId(), org.kuali.rice.kim.util.KimConstants.KIM_GROUP_KFS_NAMESPACE_CODE, KRADServiceLocatorInternal.getKualiConfigurationService().getParameterValueAsString(KNSConstants.KNS_NAMESPACE, KNSConstants.DetailTypes.DOCUMENT_DETAIL_TYPE, KNSConstants.CoreApcParms.SUPERVISOR_WORKGROUP)));
713 // }
714 //
715 // public MockPerson(String universalId, String userId, boolean supervisor) {
716 // this.principalId = universalId;
717 // this.principalName = userId;
718 // this.supervisor = supervisor;
719 // }
720 //
721 // public boolean isSupervisorUser() {
722 // return supervisor;
723 // }
724 //
725 // public String toString() {
726 // return ((supervisor) ? "Supervisor " : "") + "User (" + getPrincipalName() + ")";
727 // }
728 //
729 // public String getPrincipalId() {
730 // return this.principalId == null ? super.getPrincipalId() : this.principalId;
731 // }
732 //
733 // public String getPrincipalName() {
734 // return this.principalName == null ? super.getPrincipalName() : this.principalName;
735 // }
736 //
737 // }
738 }