001/** 002 * Copyright 2005-2014 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package edu.sampleu.admin; 017 018import org.kuali.rice.testtools.selenium.AutomatedFunctionalTestUtils; 019import org.kuali.rice.testtools.selenium.WebDriverUtils; 020 021/** 022 * @author Kuali Rice Team (rice.collab@kuali.org) 023 */ 024public abstract class ConfigComponentActionListAftBase extends ConfigComponentAftBase { 025 026 /** 027 * ITUtil.PORTAL+"?channelTitle=Component&channelUrl="+WebDriverUtils.getBaseUrlString()+ 028 * "/kr/lookup.do?methodToCall=start&businessObjectClassName=org.kuali.rice.coreservice.impl.component.ComponentBo&docFormKey=88888888&returnLocation="+ 029 * +ITUtil.PORTAL_URL+ ITUtil.HIDE_RETURN_LINK; 030 */ 031 public static final String BOOKMARK_URL = AutomatedFunctionalTestUtils.PORTAL+"?channelTitle=Component&channelUrl="+ WebDriverUtils 032 .getBaseUrlString()+"/kr/lookup.do?methodToCall=start&businessObjectClassName=org.kuali.rice.coreservice.impl.component.ComponentBo&docFormKey=88888888&returnLocation="+ 033 AutomatedFunctionalTestUtils.PORTAL_URL+ AutomatedFunctionalTestUtils.HIDE_RETURN_LINK; 034 035 @Override 036 protected String getBookmarkUrl() { 037 return BOOKMARK_URL; 038 } 039 040 private void assertActionListRequestGroup(String userInGroup, String group, String namespace, String actionCode, String beforeState, String afterState) throws InterruptedException { 041 namespaceCode = namespace; 042 String docId = testCreateActionRequestGroup(group, namespace, actionCode); 043 impersonateUser(userInGroup); 044 assertActionList(docId, actionCode, beforeState); 045 assertOutbox(docId, afterState); 046 selectTopFrame(); 047 } 048 049 private void assertActionListRequestPerson(String user, String actionType, String beforeState, String afterState) throws Exception { 050 String[][] adhocRequests = new String [][]{{user, actionType}}; 051 assertActionListRequestPerson(adhocRequests, beforeState, afterState); 052 } 053 054 private void assertActionListRequestPerson(String[][] adhocRequests, String beforeState, String afterState) throws Exception { 055 String docId = testCreateActionRequestPerson(adhocRequests); 056 impersonateUser(adhocRequests[0][0]); 057 assertActionList(docId, adhocRequests[0][1], beforeState); 058 assertOutbox(docId, afterState); 059 selectTopFrame(); 060 } 061 062 protected String testCreateActionRequestGroup(String user, String namespace, String actionType) throws InterruptedException{ 063 String docId = testCreateNew(); 064 addAdHocRecipientsGroup(new String[]{user, actionType, namespace}); 065 submitAndClose(); 066 return docId; 067 } 068 069 /** 070 * Creates an Action Request in a users action list. 071 * 072 * Initiates a new maintenance document (Component BO) with added adHoc request to create an action request 073 * in a users action list for the document 074 * @param userActions 2d array containing username, action pairs. (ex: "fred","A") 075 * 076 * @return documentID of the newly initiated document to which the created action request applies. 077 */ 078 protected String testCreateActionRequestPerson(String[][] userActions) throws InterruptedException { 079 String docId = testCreateNew(); 080 if (!userActions[0][0].isEmpty()){ 081 addAdHocRecipientsPerson(userActions); 082 } 083 submitAndClose(); 084 return docId; 085 } 086 087 public void testActionListAcknowledgeGroup() throws Exception { 088 assertActionListRequestGroup("fran", "RecipeMasters", "KR-WKFLW", "K", "PROCESSED", "FINAL"); 089 passed(); 090 } 091 092 /** 093 * tests the Acknowledge ActionRequest. 094 * Creates an Acknowledge request for a user. Then performs the Acknowledge action. 095 * @throws Exception 096 */ 097 public void testActionListAcknowledgePerson() throws Exception { 098 assertActionListRequestPerson("erin", "K", "PROCESSED", "FINAL"); 099 passed(); 100 } 101 102 /** 103 * tests the Acknowledge ActionRequest. 104 * Creates an Acknowledge request for a user and an approve request for a different user. 105 * Then performs the Acknowledge action. 106 * @throws Exception 107 */ 108 public void testActionListAcknowledgePerson_WithPendingApprove() throws Exception { 109 String[][] adhocRequests = new String [][]{{"fred","A"},{"fran","K"}}; 110 String docId = testCreateActionRequestPerson(adhocRequests); 111 impersonateUser("fran"); 112 assertActionList(docId, "K", "ENROUTE"); 113 assertOutbox(docId, "ENROUTE"); 114 selectTopFrame(); 115 passed(); 116 } 117 118 /** 119 * tests the Acknowledge ActionRequest. 120 * Creates an Acknowledge request for a user and an approve request for a different user. 121 * Then performs the Acknowledge action. 122 * @throws Exception 123 */ 124 public void testActionListAcknowledgePerson_WithPendingAcknowledge() throws Exception { 125 String[][] adhocRequests = new String [][]{{"fred","K"},{"fran","K"}}; 126 String docId = testCreateActionRequestPerson(adhocRequests); 127 impersonateUser("fran"); 128 assertActionList(docId, "K", "PROCESSED"); 129 assertOutbox(docId, "PROCESSED"); 130 selectTopFrame(); 131 passed(); 132 } 133 134 /** 135 * tests the Approve ActionRequest. 136 * Creates an approve request for a user. Then performs the Approve action. 137 * @throws Exception 138 */ 139 public void testActionListApprovePerson() throws Exception { 140 assertActionListRequestPerson("fred", "A", "ENROUTE", "FINAL"); 141 passed(); 142 } 143 144 /** 145 * tests the Approve ActionRequest. 146 * Creates an Approve request for a user and a separate approve request for a different user. 147 * Then performs the first users Approve action. 148 * @throws Exception 149 */ 150 public void testActionListApprovePerson_WithPendingApprove() throws Exception { 151 String[][] adhocRequests = new String [][]{{"fred","A"},{"fran","A"}}; 152 assertActionListRequestPerson(adhocRequests, "ENROUTE", "ENROUTE"); 153 passed(); 154 } 155 156 /** 157 * tests the Approve ActionRequest. 158 * Creates an Approve request for a user and a separate approve request for a different user. 159 * Then performs the first users Approve action. 160 * @throws Exception 161 */ 162 public void testActionListApprovePerson_WithPendingAcknowledge() throws Exception { 163 String[][] adhocRequests = new String [][]{{"fran","A"},{"fred","K"}}; 164 assertActionListRequestPerson(adhocRequests, "ENROUTE", "PROCESSED"); 165 passed(); 166 } 167 168 public void testActionListApproveGroup() throws Exception { 169 assertActionListRequestGroup("fred", "RecipeMasters", "KR-WKFLW", "A", "ENROUTE", "FINAL"); 170 passed(); 171 } 172 173 public void testActionListCompleteGroup() throws Exception { 174 assertActionListRequestGroup("dev1", "Kuali Developers", "KUALI", "C", "ENROUTE", "FINAL"); 175 passed(); 176 } 177 178 /** 179 * tests the complete ActionRequest. 180 * Creates an complete request for a user. Then performs the Complete action. 181 * @throws Exception 182 */ 183 public void testActionListCompletePerson() throws Exception { 184 assertActionListRequestPerson("fran", "C", "ENROUTE", "FINAL"); 185 passed(); 186 } 187 188 public void testActionListCompletePerson_WithPendingAcknowledge() throws Exception { 189 String[][] adhocRequests = new String [][]{{"fran","C"},{"fred","K"}}; 190 assertActionListRequestPerson(adhocRequests, "ENROUTE", "PROCESSED"); 191 passed(); 192 } 193 194 public void testActionListDisapproveGroup() throws Exception { 195 assertActionListRequestGroup("director", "ChickenRecipeMasters", "KR-WKFLW", "D", "ENROUTE", "DISAPPROVED"); 196 passed(); 197 } 198 199 /** 200 * tests the ActionRequest. 201 * Creates an approve request for a user. Then performs the Disapprove action. 202 * @throws Exception 203 */ 204 public void testActionListDisapprovePerson() throws Exception { 205 assertActionListRequestPerson("fred", "D", "ENROUTE", "DISAPPROVED"); 206 passed(); 207 } 208 209 public void testActionListFyiGroup() throws Exception { 210 assertActionListRequestGroup("dev2", "Kuali Developers", "KUALI", "F", "FINAL", "FINAL"); 211 passed(); 212 } 213 214 /** 215 * tests the FYI ActionRequest. 216 * Creates an FYI request for a user. Then performs the FYI action. 217 * @throws Exception 218 */ 219 public void testActionListFyiPerson() throws Exception { 220 assertActionListRequestPerson("eric", "F", "FINAL", "FINAL"); 221 passed(); 222 } 223 224 225 226 public void testActionListCancelPerson() throws Exception { 227 assertActionListRequestGroup("dev2", "Kuali Developers", "KUALI", "F", "FINAL", "FINAL"); 228 passed(); 229 } 230 231 public void testComponentRecallAndCancel_WithPendingPersonApprove() throws Exception { 232 String user = "erin"; 233 String docId = testCreateNew(); 234 addAdHocRecipientsPerson(new String[]{user, "A"}); 235 submit(); 236 recall(true); 237 impersonateUser(user); 238 assertNotInActionList(docId); 239 passed(); 240 } 241 242 public void testComponentRecallToActionList_WithPendingPersonApprove() throws Exception { 243 String user = "erin"; 244 245 String docId = testCreateNew(); 246 addAdHocRecipientsPerson(new String[]{user, "A"}); 247 submit(); 248 waitForTextPresent("ENROUTE"); 249 recall(false); 250 // TODO: new window vs. new tab issue 251 assertActionList(docId, "CR", "SAVED"); 252 253 driver.navigate().to(WebDriverUtils.getBaseUrlString() + BOOKMARK_URL); 254 waitAndClickDocSearch(); 255 selectFrameIframePortlet(); 256 waitAndTypeByName("documentId",docId); 257 waitAndClickByXpath(SEARCH_XPATH); 258 waitForTextPresent("FINAL"); 259 passed(); 260 } 261 262 public void testComponentCancel_WithPendingPersonApprove()throws Exception { 263 String docId = testCreateNew(); 264 addAdHocRecipientsPerson(new String[]{"fred", "A"}); 265 waitAndClickByName("methodToCall.cancel"); 266 assertDocSearchNoResults(docId); 267 passed(); 268 } 269 270 public void testComponentSave_WithPendingPersonApprove() throws Exception { 271 String user = "erin"; 272 String docId = testCreateNew(); 273 addAdHocRecipientsPerson(new String[]{user, "A"}); 274 saveAndReload(); 275 waitForTextPresent("SAVED"); 276 passed(); 277 } 278 279 public void assertComponentSubmit_WithPersonRequest(String user, String action, String state) throws Exception { 280 String[][] userActions = new String [][]{{user, action}}; 281 String docId = testCreateNew(); 282 if (!userActions[0][0].isEmpty()){ 283 addAdHocRecipientsPerson(userActions); 284 } 285 submit(); 286 waitForTextPresent("ENROUTE"); 287 waitAndClickByName("methodToCall.reload"); 288 waitForTextPresent(state); 289 close(); 290 } 291 292 public void testComponentSubmit() throws Exception { 293 assertComponentSubmit_WithPersonRequest("", "", "FINAL"); 294 passed(); 295 } 296 297 public void testComponentSubmit_WithPendingPersonApprove() throws Exception { 298 assertComponentSubmit_WithPersonRequest("erin", "A", "ENROUTE"); 299 passed(); 300 } 301 302 public void testComponentSubmit_WithPendingPersonAcknowledge() throws Exception { 303 assertComponentSubmit_WithPersonRequest("erin", "K", "PROCESSED"); 304 passed(); 305 } 306 307 public void testComponentSubmit_WithPendingPersonFyi() throws Exception { 308 assertComponentSubmit_WithPersonRequest("erin", "F", "FINAL"); 309 passed(); 310 } 311 312 313}