001 /**
002 * Copyright 2010 The Kuali Foundation Licensed under the
003 * Educational Community License, Version 2.0 (the "License"); you may
004 * not use this file except in compliance with the License. You may
005 * obtain a copy of the License at
006 *
007 * http://www.osedu.org/licenses/ECL-2.0
008 *
009 * Unless required by applicable law or agreed to in writing,
010 * software distributed under the License is distributed on an "AS IS"
011 * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
012 * or implied. See the License for the specific language governing
013 * permissions and limitations under the License.
014 */
015
016 package org.kuali.rice.student.permission;
017
018 import static org.junit.Assert.*;
019
020 import org.junit.Ignore;
021 import org.junit.Test;
022 import org.kuali.rice.kew.api.WorkflowDocument;
023 import org.kuali.rice.kew.api.WorkflowDocumentFactory;
024 import org.kuali.rice.kew.api.action.ActionRequestType;
025 import org.kuali.rice.kew.api.document.DocumentStatus;
026 import org.kuali.rice.kim.api.KimConstants;
027 import org.kuali.rice.kim.api.permission.PermissionService;
028 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
029 import org.kuali.rice.student.StudentStandaloneTestBase;
030
031 import java.util.HashMap;
032 import java.util.LinkedHashMap;
033 import java.util.Map;
034
035 /**
036 * Test case to verify permissions work properly
037 *
038 * @author delyea
039 */
040 @Ignore
041 //FIXME(kscm-713)
042 public class BasicPermissionsTest extends StudentStandaloneTestBase {
043
044 protected static final String PERMISSIONS_NAME_OPEN_DOCUMENT = "Open Document";
045 protected static final String PERMISSIONS_NAME_COMMENT_ON_DOCUMENT = "Comment on Document";
046 protected static final String PERMISSIONS_NAME_EDIT_DOCUMENT = "Edit Document";
047
048 @Override
049 public void setUp() throws Exception {
050 super.setUp();
051 loadXmlFile("BasicPermissionsTestConfig.xml");
052 }
053
054 protected void verifyPermissions(String principalId, String documentId, Map<String,Boolean> existingPermissions) {
055 String permissionNamespace = "KS-CM";
056 PermissionService permService = KimApiServiceLocator.getPermissionService();
057 for (Map.Entry<String, Boolean> entry : existingPermissions.entrySet()) {
058 if ( (entry.getValue() != null) && (entry.getValue().booleanValue()) ) {
059 Map<String,String> result = new LinkedHashMap<String,String> ();
060 result.put(KimConstants.AttributeConstants.DOCUMENT_NUMBER, ""+documentId);
061 assertTrue("Principal Id '" + principalId + "' should have permission '" + entry.getKey() + "'", permService.isAuthorized(principalId, permissionNamespace, entry.getKey(), result));
062 }
063 else {
064 Map<String,String> result = new LinkedHashMap<String,String> ();
065 result.put(KimConstants.AttributeConstants.DOCUMENT_NUMBER, ""+documentId);
066 assertFalse("Principal Id '" + principalId + "' should not have permission '" + entry.getKey() + "'", permService.isAuthorized(principalId, permissionNamespace, entry.getKey(), result));
067 }
068 }
069 }
070
071 @Test public void testOpenPermission() throws Exception {
072 String documentTypeName = "BasicPermissionsTestDocument";
073 Map<String,Boolean> hasPermissionByPermissionName = new HashMap<String,Boolean>();
074
075 String principalId = "testuser1";
076 WorkflowDocument doc = WorkflowDocumentFactory.createDocument(principalId, documentTypeName);
077 doc.saveDocument("");
078
079 // verify testuser1 has correct permissions as initiator
080 principalId = "testuser1";
081 doc = WorkflowDocumentFactory.createDocument(principalId, doc.getDocumentId());
082 hasPermissionByPermissionName.put(PERMISSIONS_NAME_OPEN_DOCUMENT, Boolean.TRUE);
083 hasPermissionByPermissionName.put(PERMISSIONS_NAME_COMMENT_ON_DOCUMENT, Boolean.FALSE);
084 hasPermissionByPermissionName.put(PERMISSIONS_NAME_EDIT_DOCUMENT, Boolean.FALSE);
085 verifyPermissions(principalId, ""+doc.getDocumentId(), hasPermissionByPermissionName);
086
087 // send adhoc approve to 'testuser3'
088 doc.adHocToPrincipal(ActionRequestType.APPROVE, "", "testuser3", "", true);
089
090 // verify testuser2 has no permissions
091 principalId = "testuser2";
092 doc = WorkflowDocumentFactory.createDocument(principalId, doc.getDocumentId());
093 hasPermissionByPermissionName.put(PERMISSIONS_NAME_OPEN_DOCUMENT, Boolean.FALSE);
094 hasPermissionByPermissionName.put(PERMISSIONS_NAME_COMMENT_ON_DOCUMENT, Boolean.FALSE);
095 hasPermissionByPermissionName.put(PERMISSIONS_NAME_EDIT_DOCUMENT, Boolean.FALSE);
096 verifyPermissions(principalId, ""+doc.getDocumentId(), hasPermissionByPermissionName);
097
098 // verify testuser3 has no permissions
099 principalId = "testuser3";
100 doc = WorkflowDocumentFactory.createDocument(principalId, doc.getDocumentId());
101 hasPermissionByPermissionName.put(PERMISSIONS_NAME_OPEN_DOCUMENT, Boolean.TRUE);
102 hasPermissionByPermissionName.put(PERMISSIONS_NAME_COMMENT_ON_DOCUMENT, Boolean.TRUE);
103 hasPermissionByPermissionName.put(PERMISSIONS_NAME_EDIT_DOCUMENT, Boolean.TRUE);
104 verifyPermissions(principalId, ""+doc.getDocumentId(), hasPermissionByPermissionName);
105
106 doc = WorkflowDocumentFactory.createDocument(principalId, doc.getDocumentId());
107 doc.route("");
108
109 // verify testuser1 has correct permissions as initiator
110 principalId = "testuser1";
111 hasPermissionByPermissionName.put(PERMISSIONS_NAME_OPEN_DOCUMENT, Boolean.TRUE);
112 hasPermissionByPermissionName.put(PERMISSIONS_NAME_COMMENT_ON_DOCUMENT, Boolean.FALSE);
113 hasPermissionByPermissionName.put(PERMISSIONS_NAME_EDIT_DOCUMENT, Boolean.FALSE);
114 verifyPermissions(principalId, ""+doc.getDocumentId(), hasPermissionByPermissionName);
115
116 // verify testuser3 has correct permissions as router
117 principalId = "testuser3";
118 hasPermissionByPermissionName.put(PERMISSIONS_NAME_OPEN_DOCUMENT, Boolean.TRUE);
119 hasPermissionByPermissionName.put(PERMISSIONS_NAME_COMMENT_ON_DOCUMENT, Boolean.FALSE);
120 hasPermissionByPermissionName.put(PERMISSIONS_NAME_EDIT_DOCUMENT, Boolean.FALSE);
121 verifyPermissions(principalId, ""+doc.getDocumentId(), hasPermissionByPermissionName);
122
123 // verify fred has request for approval and correct permissions
124 principalId = "fred";
125 doc = WorkflowDocumentFactory.createDocument(principalId, doc.getDocumentId());
126 assertTrue("Approval should be requested of user '" + principalId + "'", doc.isApprovalRequested());
127 hasPermissionByPermissionName.put(PERMISSIONS_NAME_OPEN_DOCUMENT, Boolean.TRUE);
128 hasPermissionByPermissionName.put(PERMISSIONS_NAME_COMMENT_ON_DOCUMENT, Boolean.TRUE);
129 hasPermissionByPermissionName.put(PERMISSIONS_NAME_EDIT_DOCUMENT, Boolean.TRUE);
130 verifyPermissions(principalId, ""+doc.getDocumentId(), hasPermissionByPermissionName);
131
132 // verify doug has request for approval and correct permissions
133 principalId = "doug";
134 doc = WorkflowDocumentFactory.createDocument(principalId, doc.getDocumentId());
135 assertTrue("FYI should be requested of user '" + principalId + "'", doc.isFYIRequested());
136 hasPermissionByPermissionName.put(PERMISSIONS_NAME_OPEN_DOCUMENT, Boolean.TRUE);
137 hasPermissionByPermissionName.put(PERMISSIONS_NAME_COMMENT_ON_DOCUMENT, Boolean.TRUE);
138 hasPermissionByPermissionName.put(PERMISSIONS_NAME_EDIT_DOCUMENT, Boolean.FALSE);
139 verifyPermissions(principalId, ""+doc.getDocumentId(), hasPermissionByPermissionName);
140
141 // appprove the document as fred and re-verify his and doug's permissions
142 principalId = "fred";
143 doc = WorkflowDocumentFactory.createDocument(principalId, doc.getDocumentId());
144 doc.approve("");
145
146 // verify fred has no request for approval and correct permissions
147 principalId = "fred";
148 doc = WorkflowDocumentFactory.createDocument(principalId, doc.getDocumentId());
149 assertFalse("Approval should be requested of user '" + principalId + "'", doc.isApprovalRequested());
150 hasPermissionByPermissionName.put(PERMISSIONS_NAME_OPEN_DOCUMENT, Boolean.TRUE);
151 hasPermissionByPermissionName.put(PERMISSIONS_NAME_COMMENT_ON_DOCUMENT, Boolean.FALSE);
152 hasPermissionByPermissionName.put(PERMISSIONS_NAME_EDIT_DOCUMENT, Boolean.FALSE);
153 verifyPermissions(principalId, ""+doc.getDocumentId(), hasPermissionByPermissionName);
154
155 // verify doug still has request for FYI and correct permissions
156 principalId = "doug";
157 doc = WorkflowDocumentFactory.createDocument(principalId, doc.getDocumentId());
158 assertTrue("FYI should be requested of user '" + principalId + "'", doc.isFYIRequested());
159 hasPermissionByPermissionName.put(PERMISSIONS_NAME_OPEN_DOCUMENT, Boolean.TRUE);
160 hasPermissionByPermissionName.put(PERMISSIONS_NAME_COMMENT_ON_DOCUMENT, Boolean.TRUE);
161 hasPermissionByPermissionName.put(PERMISSIONS_NAME_EDIT_DOCUMENT, Boolean.FALSE);
162 verifyPermissions(principalId, ""+doc.getDocumentId(), hasPermissionByPermissionName);
163
164 // verify edna has request for Acknoweldge and correct permissions
165 principalId = "edna";
166 doc = WorkflowDocumentFactory.createDocument(principalId, doc.getDocumentId());
167 assertTrue("Acknowledge should be requested of user '" + principalId + "'", doc.isAcknowledgeRequested());
168 hasPermissionByPermissionName.put(PERMISSIONS_NAME_OPEN_DOCUMENT, Boolean.TRUE);
169 hasPermissionByPermissionName.put(PERMISSIONS_NAME_COMMENT_ON_DOCUMENT, Boolean.TRUE);
170 hasPermissionByPermissionName.put(PERMISSIONS_NAME_EDIT_DOCUMENT, Boolean.FALSE);
171 verifyPermissions(principalId, ""+doc.getDocumentId(), hasPermissionByPermissionName);
172
173 // route the document to PROCESSED
174 principalId = "fran";
175 doc = WorkflowDocumentFactory.createDocument(principalId, doc.getDocumentId());
176 doc.approve("");
177 principalId = "user1";
178 doc = WorkflowDocumentFactory.createDocument(principalId, doc.getDocumentId());
179 doc.approve("");
180
181 // verify edna still has request for Acknoweldge and correct permissions
182 principalId = "edna";
183 doc = WorkflowDocumentFactory.createDocument(principalId, doc.getDocumentId());
184 assertEquals (doc.getStatus(), DocumentStatus.PROCESSED);
185 assertTrue("Acknowledge should be requested of user '" + principalId + "'", doc.isAcknowledgeRequested());
186 hasPermissionByPermissionName.put(PERMISSIONS_NAME_OPEN_DOCUMENT, Boolean.TRUE);
187 hasPermissionByPermissionName.put(PERMISSIONS_NAME_COMMENT_ON_DOCUMENT, Boolean.TRUE);
188 hasPermissionByPermissionName.put(PERMISSIONS_NAME_EDIT_DOCUMENT, Boolean.FALSE);
189 verifyPermissions(principalId, ""+doc.getDocumentId(), hasPermissionByPermissionName);
190
191 // move document to FINAL
192 doc.acknowledge("");
193
194 // verify edna has no request and correct permissions
195 principalId = "edna";
196 doc = WorkflowDocumentFactory.createDocument(principalId, doc.getDocumentId());
197 assertEquals (doc.getStatus(), DocumentStatus.FINAL);
198 hasPermissionByPermissionName.put(PERMISSIONS_NAME_OPEN_DOCUMENT, Boolean.TRUE);
199 hasPermissionByPermissionName.put(PERMISSIONS_NAME_COMMENT_ON_DOCUMENT, Boolean.FALSE);
200 hasPermissionByPermissionName.put(PERMISSIONS_NAME_EDIT_DOCUMENT, Boolean.FALSE);
201 verifyPermissions(principalId, ""+doc.getDocumentId(), hasPermissionByPermissionName);
202
203 // verify doug still has request for FYI and correct permissions
204 principalId = "doug";
205 doc = WorkflowDocumentFactory.createDocument(principalId, doc.getDocumentId());
206 assertTrue("FYI should be requested of user '" + principalId + "'", doc.isFYIRequested());
207 hasPermissionByPermissionName.put(PERMISSIONS_NAME_OPEN_DOCUMENT, Boolean.TRUE);
208 hasPermissionByPermissionName.put(PERMISSIONS_NAME_COMMENT_ON_DOCUMENT, Boolean.TRUE);
209 hasPermissionByPermissionName.put(PERMISSIONS_NAME_EDIT_DOCUMENT, Boolean.FALSE);
210 verifyPermissions(principalId, ""+doc.getDocumentId(), hasPermissionByPermissionName);
211
212 }
213 }