001/**
002 * Copyright 2005-2015 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}