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;
020import org.openqa.selenium.By;
021import org.openqa.selenium.WebElement;
022
023/**
024 *  @author Kuali Rice Team (rice.collab@kuali.org)
025 */
026public 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}