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