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.junit.Test;
019    import org.kuali.rice.testtools.selenium.AutomatedFunctionalTestUtils;
020    import org.kuali.rice.testtools.selenium.WebDriverLegacyITBase;
021    import org.kuali.rice.testtools.selenium.WebDriverUtils;
022    import org.openqa.selenium.By;
023    import org.openqa.selenium.WebElement;
024    
025    import java.util.List;
026    
027    import static org.junit.Assert.assertEquals;
028    
029    /**
030     * @author Kuali Rice Team (rice.collab@kuali.org)
031     */
032    public class DocSearchAft extends WebDriverLegacyITBase {
033    
034        public static String BOOKMARK_URL = AutomatedFunctionalTestUtils.PORTAL + "?channelTitle=Document%20Type&channelUrl=" + WebDriverUtils
035                .getBaseUrlString() + "/kr/lookup.do?methodToCall=start&businessObjectClassName=org.kuali.rice.kew.doctype.bo.DocumentType&returnLocation=" + AutomatedFunctionalTestUtils.PORTAL_URL + AutomatedFunctionalTestUtils.HIDE_RETURN_LINK;
036    
037        String docId;
038        String parentName;
039    
040        @Override
041        protected String getBookmarkUrl() {
042            return BOOKMARK_URL;
043        }
044    
045       public void createAndSaveDoc() throws Exception{
046            waitForTitleToEqualKualiPortalIndex();
047            waitAndClickByLinkText("Administration");
048            waitForTitleToEqualKualiPortalIndex();
049            waitAndClickByLinkText("Document Type");
050            waitForTitleToEqualKualiPortalIndex();
051            selectFrame("iframeportlet");
052            waitAndClickByXpath("//img[contains(@alt,'create new')]");
053            waitForElementPresentByXpath("//*[@name='methodToCall.route' and @alt='submit']","save button does not exist on the page");
054            waitForElementPresentByXpath("//div[@id='headerarea']/div/table/tbody/tr[1]/td[1]");
055            docId = driver.findElement(By.xpath("//div[@id='headerarea']/div/table/tbody/tr[1]/td[1]")).getText();
056            waitAndTypeByXpath("//input[@id='document.documentHeader.documentDescription']", "Creating new Document Type");
057            String parentDocType = "//input[@name='methodToCall.performLookup.(!!org.kuali.rice.kew.doctype.bo.DocumentType!!).(((name:document.newMaintainableObject.parentDocType.name,documentTypeId:document.newMaintainableObject.docTypeParentId,))).((`document.newMaintainableObject.parentDocType.name:name,`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;" + getBaseUrlString() + "/kr/lookup.do;::::).anchor4']";
058            waitAndClickByXpath(parentDocType);
059            waitAndClickByXpath("//input[@name='methodToCall.search' and @value='search']");
060            waitForPageToLoad();
061            parentName= driver.findElement(By.xpath("//table[@id='row']/tbody/tr[1]/td[3]")).getText();
062            waitAndClickByLinkText("return value");
063            String docTypeName = "TestDocType " + AutomatedFunctionalTestUtils.DTS;
064            waitForElementPresentByXpath("//input[@id='document.newMaintainableObject.name']");
065            waitAndTypeByXpath("//input[@id='document.newMaintainableObject.name']", docTypeName);
066            waitAndTypeByXpath("//input[@id='document.newMaintainableObject.unresolvedDocHandlerUrl']", "${kr.url}/maintenance.do?methodToCall=docHandler");
067            waitAndTypeByXpath("//input[@id='document.newMaintainableObject.actualNotificationFromAddress']", "NFA");
068            waitAndTypeByXpath("//input[@id='document.newMaintainableObject.label']", "TestDocument Label");
069            waitAndTypeByXpath("//input[@id='document.newMaintainableObject.unresolvedHelpDefinitionUrl']", "default.htm?turl=WordDocuments%2Fdocumenttype.htm");
070            waitAndClickByXpath("//input[@name='methodToCall.save' and @alt='save']");
071            Thread.sleep(2000); // TODO wait for save confirmation
072            checkForIncidentReport();
073            selectTopFrame();
074        }
075        @Test
076        public void testBasicDocSearchBookmark() throws Exception {
077            createAndSaveDoc();
078            waitAndClickByXpath("//a/img[@alt='doc search']");
079            waitForPageToLoad();
080            selectFrame("iframeportlet");
081            waitForElementPresentByXpath("//div[@class='lookupcreatenew']/input[@alt='detailed search']");
082            waitForElementPresentByXpath("//div[@class='lookupcreatenew']/input[@alt='superuser search']");
083            waitForElementPresentByXpath("//div[@class='lookupcreatenew']/input[@alt='clear saved searches search']");
084            waitAndTypeByName("documentTypeName", "DocumentTypeDocument");
085            waitAndTypeByName("initiatorPrincipalName", "admin");
086            waitAndTypeByName("documentId", docId);
087            //waitAndTypeByName("rangeLowerBoundKeyPrefix_dateCreated", "10/01/2010");
088            //waitAndTypeByName("dateCreated", "10/13/2010");
089            waitAndClickMethodToCallSearchButton();
090            selectFrameIframePortlet();
091            assertEquals(docId, waitFor(By.xpath("//table[@id='row']/tbody/tr[1]/td[1]/a")).getText());
092            //Thread.sleep(2000);
093            waitAndClickByXpath("//input[@name='methodToCall.clearValues' and @alt='clear']");
094            assertEquals("", driver.findElement(By.xpath("//input[@name='documentTypeName']")).getAttribute("value"));
095            assertEquals("", driver.findElement(By.xpath("//input[@name='initiatorPrincipalName']")).getAttribute("value"));
096            assertEquals("", driver.findElement(By.xpath("//input[@name='documentId']")).getAttribute("value"));
097            assertEquals("", driver.findElement(By.xpath("//input[@name='rangeLowerBoundKeyPrefix_dateCreated']")).getAttribute("value"));
098            assertEquals("", driver.findElement(By.xpath("//input[@name='dateCreated']")).getAttribute("value"));
099            waitAndClickByXpath("//a[@title='cancel']");
100        }
101    
102        @Test
103        public void testBasicFullDocSearchBookmark() throws Exception {
104            waitAndClickByXpath("//a/img[@alt='doc search']");
105            waitForPageToLoad();
106            selectFrame("iframeportlet");
107            waitForElementPresentByXpath("//div[@class='lookupcreatenew']/input[@alt='detailed search']");
108            waitForElementPresentByXpath("//div[@class='lookupcreatenew']/input[@alt='superuser search']");
109            waitForElementPresentByXpath("//div[@class='lookupcreatenew']/input[@alt='clear saved searches search']");
110            waitAndTypeByName("rangeLowerBoundKeyPrefix_dateCreated", "1/1/1900"); // remove default today's date
111            waitAndClickMethodToCallSearchButton();
112            waitForTextPresent("Export options:");
113        }
114    
115        @Test
116        public void testDetailedDocSearchBookmark() throws Exception{
117            createAndSaveDoc();
118            waitAndClickByXpath("//a/img[@alt='doc search']");
119            waitForPageToLoad();
120            selectFrame("iframeportlet");
121            waitForElementPresentByXpath("//div[@class='lookupcreatenew']/input[@alt='detailed search']");
122            waitForElementPresentByXpath("//div[@class='lookupcreatenew']/input[@alt='superuser search']");
123            waitForElementPresentByXpath("//div[@class='lookupcreatenew']/input[@alt='clear saved searches search']");
124            waitAndClickByXpath("//div[@class='lookupcreatenew']/input[@alt='detailed search']");
125            waitForElementPresentByXpath("//div[@class='lookupcreatenew']/input[@alt='basic search']", "DocSearchAft.testDetailedDocSearch");
126            //waitAndTypeByName("documentTypeName", parentName);
127            waitAndTypeByName("initiatorPrincipalName", "admin");
128            waitAndTypeByName("documentId", docId);
129            //waitAndTypeByName("rangeLowerBoundKeyPrefix_dateCreated", "10/01/2010");
130            //waitAndTypeByName("dateCreated", "10/13/2010");
131            assertElementPresentByName("approverPrincipalName", "Approver input field is not there in the detailed search");
132            //waitAndTypeByName("approverPrincipalName", "director");
133            assertElementPresentByName("viewerPrincipalName", "Viewer input field is not there in the detailed search");
134            //waitAndTypeByName("viewerPrincipalName", "superviser");
135            assertElementPresentByXpath("//select[@id='statusCode']", "Document Status select field is not there in the detailed search");
136            selectByXpath("//select[@id='statusCode']", "- SAVED");
137            waitAndClickMethodToCallSearchButton();
138            assertTextNotPresent("No values match this search.");
139            assertTrue(driver.findElement(By.id("row")).getText().contains("SAVED"));
140            assertElementPresentByXpath("//table[@id='row']/tbody/tr[1]/td[contains(a,'admin')]");
141            //Thread.sleep(2000);
142            waitAndClickByXpath("//input[@name='methodToCall.clearValues' and @alt='clear']");
143            //assertEquals("", driver.findElement(By.xpath("//input[@name='documentTypeName']")).waitAndGetAttribute("value"));
144            assertEquals("", driver.findElement(By.xpath("//input[@name='initiatorPrincipalName']")).getAttribute("value"));
145            //assertEquals("", driver.findElement(By.xpath("//input[@name='documentId']")).waitAndGetAttribute("value"));
146            //assertEquals("", driver.findElement(By.xpath("//input[@name='rangeLowerBoundKeyPrefix_dateCreated']")).waitAndGetAttribute("value"));
147            //assertEquals("", driver.findElement(By.xpath("//input[@name='dateCreated']")).waitAndGetAttribute("value"));
148            waitAndClickByXpath("//a[@title='cancel']");
149            passed();
150        }
151        
152        @Test
153        public void testSuperUserSearchBookmark() throws Exception{
154            createAndSaveDoc();
155            waitAndClickByXpath("//a/img[@alt='doc search']");
156            waitForPageToLoad();
157            selectFrame("iframeportlet");
158            waitForElementPresentByXpath("//div[@class='lookupcreatenew']/input[@alt='detailed search']");
159            waitForElementPresentByXpath("//div[@class='lookupcreatenew']/input[@alt='superuser search']");
160            waitForElementPresentByXpath("//div[@class='lookupcreatenew']/input[@alt='clear saved searches search']");
161            waitAndClickByXpath("//div[@class='lookupcreatenew']/input[@alt='superuser search']");
162            waitForElementPresentByXpath("//div[@class='lookupcreatenew']/input[@alt='non-superuser search']",
163                    "DocSearchAft.testSuperUserSearch");
164            waitAndClickMethodToCallSearchButton();
165            Thread.sleep(3000);
166            selectFrameIframePortlet();
167            waitAndClickByXpath("//table[@id='row']/tbody/tr[1]/td[1]/a");
168            selectTopFrame();
169            Thread.sleep(3000);
170            switchToWindow("Kuali :: Superuser Document Service");
171            waitForPageToLoad();
172            //Thread.sleep(4000);
173    
174            waitAndClickByXpath("//input[@src='images/buttonsmall_complete.gif']");
175            waitForElementPresentByName("methodToCall.approve", "approve button does not exist on the page");
176            assertElementPresentByName("methodToCall.disapprove", "disapprove button does not exist on the page");
177            assertElementPresentByName("methodToCall.cancel", "cancel button does not exist on the page");
178            waitAndClickByName("methodToCall.approve", "approve button does not exist on the page");
179            jGrowl("Click Cancel Button");
180            waitAndClickByXpath("//a[@href='DocumentSearch.do']/img[@alt='cancel']");
181            waitAndClickMethodToCallSearchButton();
182            waitForPageToLoad();
183            assertEquals("FINAL", driver.findElement(By.xpath("//table[@id='row']/tbody/tr[1]/td[4]")).getText());
184            passed();
185        }
186    
187        protected void waitAndClickMethodToCallSearchButton() throws InterruptedException {
188            jGrowl("Click Search Button");
189            waitAndClickByXpath("//input[@name='methodToCall.search' and @alt='search']");
190        }
191    
192        @Test
193        public void testClearSavedSearchesBookmark() throws Exception{
194            waitAndClickByXpath("//a/img[@alt='doc search']");
195            waitForPageToLoad();
196            selectFrame("iframeportlet");
197            waitForElementPresentByXpath("//div[@class='lookupcreatenew']/input[@alt='detailed search']");
198            waitForElementPresentByXpath("//div[@class='lookupcreatenew']/input[@alt='superuser search']");
199            waitForElementPresentByXpath("//div[@class='lookupcreatenew']/input[@alt='clear saved searches search']");
200            waitAndClickByXpath("//div[@class='lookupcreatenew']/input[@alt='clear saved searches search']");
201            waitForPageToLoad();
202            WebElement select1 = findElement(By.xpath("//select[@id='savedSearchToLoadAndExecute']"));
203            List<WebElement> options = select1.findElements(By.tagName("option"));
204            int count= options.size();
205            assertEquals(5,count);
206            passed();
207        }
208        
209        @Test
210        public void testAjaxPageReloadBookmark() throws Exception{
211            waitAndClickByXpath("//a/img[@alt='doc search']");
212            waitForPageToLoad();
213            selectFrame("iframeportlet");
214            waitForElementPresentByXpath("//div[@class='lookupcreatenew']/input[@alt='detailed search']");
215            waitForElementPresentByXpath("//div[@class='lookupcreatenew']/input[@alt='superuser search']");
216            waitForElementPresentByXpath("//div[@class='lookupcreatenew']/input[@alt='clear saved searches search']");
217            waitForElementPresentByXpath("//select[@id='savedSearchToLoadAndExecute']");
218            waitAndTypeByName("documentTypeName", "KualiNotification");
219            fireEvent("documentTypeName", "blur");
220            waitForElementPresentByName("documentAttribute.notificationContentType");
221            assertElementPresentByName("documentAttribute.notificationChannel");
222            assertElementPresentByName("documentAttribute.notificationProducer");
223            assertElementPresentByName("documentAttribute.notificationPriority");
224            assertElementPresentByName("documentAttribute.notificationRecipients");
225            assertElementPresentByName("documentAttribute.notificationSenders");
226            waitAndClickByXpath("//a[@title='cancel']");
227            passed();
228        }
229    }