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.config.namespace.pending;
017    
018    import edu.sampleu.admin.AdminTmplMthdAftNavBase;
019    import org.apache.commons.lang.RandomStringUtils;
020    import org.kuali.rice.testtools.selenium.AutomatedFunctionalTestUtils;
021    
022    /**
023     * @author Kuali Rice Team (rice.collab@kuali.org)
024     */
025    
026    public abstract class PendingBase extends AdminTmplMthdAftNavBase {
027        /**
028         * methodToCall.insertAdHocRoutePerson
029         */
030        protected static final String ADD_PERSON_ELEMENT_NAME = "methodToCall.insertAdHocRoutePerson";
031    
032        /**
033         * newAdHocRoutePerson.id
034         */
035        protected static final String ADD_PERSON_TEXT_ELEMENT_NAME = "newAdHocRoutePerson.id";
036    
037        /**
038         * methodToCall.toggleTab.tabAdHocRecipients
039         */
040        protected static final String DOCUMENT_AD_HOC_RECIPIENTS_TOGGLE = "methodToCall.toggleTab.tabAdHocRecipients";
041        /**
042         * document.documentHeader.documentDescription
043         */
044        protected static final String DOCUMENT_DESCRIPTION_NAME = "document.documentHeader.documentDescription";
045    
046        /**
047         * document.newMaintainableObject.code
048         */
049        protected static final String DOCUMENT_CODE_NAME = "document.newMaintainableObject.code";
050    
051        /**
052         * document.newMaintainableObject.name
053         */
054        protected static final String DOCUMENT_NAME = "document.newMaintainableObject.name";
055    
056        /**
057         * document.newMaintainableObject.applicationId
058         */
059        protected static final String DOCUMENT_APPLICATIONID_NAME = "document.newMaintainableObject.applicationId";
060    
061        /**
062         * methodToCall.performLookup.(!!org.kuali.rice.kim.impl.group.GroupBo!!).(((namespaceCode:newAdHocRouteWorkgroup.recipientNamespaceCode,name:newAdHocRouteWorkgroup.recipientName))).((`newAdHocRouteWorkgroup.recipientNamespaceCode:namespaceCode,newAdHocRouteWorkgroup.recipientName:name`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;;::::).anchor
063         */
064        protected static final String NAME_LOOKUP_COMPONENT_NAME ="methodToCall.performLookup.(!!org.kuali.rice.kim.impl.group.GroupBo!!).(((namespaceCode:newAdHocRouteWorkgroup.recipientNamespaceCode,name:newAdHocRouteWorkgroup.recipientName))).((`newAdHocRouteWorkgroup.recipientNamespaceCode:namespaceCode,newAdHocRouteWorkgroup.recipientName:name`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;;::::).anchor";
065    
066        /**
067         * newAdHocRoutePerson.actionRequested
068         */
069        protected static final String NEW_AD_HOC_ROUTE_PERSON_ACTION_REQUESTED = "newAdHocRoutePerson.actionRequested";
070    
071        /**
072         * methodToCall.route
073         */
074        protected static final String SUBMIT_NAME = "methodToCall.route";
075    
076        protected void assertSuperGroup(String docId) throws InterruptedException {
077            // second checkbox (APPROVED)
078            waitAndClick("#tab-SuperUserAction-div > div:nth-child(2) > table:nth-child(2) > tbody:nth-child(1) > tr:nth-child(3) > td:nth-child(1) > input:nth-child(1)");
079            waitAndTypeByName("superUserAnnotation","test suaction");
080            waitAndClickByName("methodToCall.takeSuperUserActions");
081            if(!isTextPresent("Group1")) {
082                assertTextPresent("superuser approved in Document " + docId);
083            } else {
084                fail("Super User Approve functionality may not be working.");
085            }
086        }
087            /**
088            * {@inheritDoc}
089            * Namespace
090            * @return
091            */
092        @Override
093        protected String getLinkLocator() {
094            return "Namespace";
095        }
096    
097        protected void fillInAddAdHocPersons(String[][] personsActions) throws Exception {
098            waitAndClickByName(DOCUMENT_AD_HOC_RECIPIENTS_TOGGLE);
099    
100            for (String[] personAction: personsActions) {
101                waitAndTypeByName(ADD_PERSON_TEXT_ELEMENT_NAME, personAction[0]);
102                if (personAction.length > 1) {
103                    selectByName(NEW_AD_HOC_ROUTE_PERSON_ACTION_REQUESTED, personAction[1]);
104                }
105                waitAndClickByName(ADD_PERSON_ELEMENT_NAME);
106                Thread.sleep(1000);
107            }
108        }
109    
110        protected void fillInAdHocGroups(String[][] groupsActions) throws Exception {
111            waitAndClickByName(DOCUMENT_AD_HOC_RECIPIENTS_TOGGLE);
112            for (String[] groupAction: groupsActions) {
113                waitAndClickByName(NAME_LOOKUP_COMPONENT_NAME);
114                waitAndTypeByName("name", groupAction[0]);
115                waitAndClickByXpath(SEARCH_XPATH);
116                waitAndClickByLinkText("return value");
117                if (groupAction.length > 1) {
118                    selectByName("newAdHocRouteWorkgroup.actionRequested", groupAction[1]);
119                }
120                waitAndClickByName("methodToCall.insertAdHocRouteWorkgroup");
121                Thread.sleep(1000);
122            }
123        }
124    
125        protected void fillInNamespaceOverview(String descBase, String codeNameBase, String nameBase, String appId) throws Exception {
126            selectFrameIframePortlet();
127            waitAndCreateNew();
128            waitAndTypeByName(DOCUMENT_DESCRIPTION_NAME, descBase + " " + AutomatedFunctionalTestUtils
129                    .createUniqueDtsPlusTwoRandomCharsNot9Digits());
130            String randomFour = RandomStringUtils.randomAlphabetic(4).toLowerCase();
131            waitAndTypeByName(DOCUMENT_CODE_NAME, codeNameBase + randomFour);
132            waitAndTypeByName(DOCUMENT_NAME, nameBase + randomFour);
133            waitAndTypeByName(DOCUMENT_APPLICATIONID_NAME, appId);
134        }
135    
136        protected String submitAndLookupDoc() throws InterruptedException {
137            waitAndClickByName(SUBMIT_NAME);
138            String docId= waitForDocId();
139            switchToWindow("Kuali Portal Index");
140            waitAndClickDocSearch();
141            selectFrameIframePortlet();
142            waitAndTypeByName("documentId",docId);
143            waitAndClickByXpath(SEARCH_XPATH);
144            if(!isTextPresent("No values match this search.")) {
145                waitAndClickByLinkText(docId);
146                switchToWindow("Kuali :: Namespace");
147            } else {
148                fail("Previous Document may have routing problem so the latest Document is not able to submit correctly.");
149            }
150            return docId;
151        }
152    
153        protected void assertSuperPerson(String user, String action, String docId) throws InterruptedException {
154            waitAndClickByName("selectedActionRequests");
155            waitAndTypeByName("superUserAnnotation","test suaction");
156            waitAndClickByName("methodToCall.takeSuperUserActions");
157    
158            Thread.sleep(1000);
159            if(!isTextPresent(user)) {
160                assertTextPresent("superuser " + action + " in Document " + docId);
161            } else {
162                fail("Super User Approve functionality may not be working.");
163            }
164        }
165    }