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