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.krad.configview;
017
018import org.kuali.rice.testtools.common.JiraAwareFailable;
019import org.kuali.rice.testtools.selenium.WebDriverLegacyITBase;
020import org.openqa.selenium.By;
021import org.openqa.selenium.WebElement;
022
023import java.util.List;
024
025/**
026 * Tests the Component section in Rice.
027 *
028 * @author Kuali Rice Team (rice.collab@kuali.org)
029 */
030public abstract class ConfigurationTestViewAftBase extends WebDriverLegacyITBase {
031
032    /**
033     * "/kr-krad/configuration-test-view-uif-controller?viewId=ConfigurationTestView&methodToCall=start";
034     */
035    public static final String BOOKMARK_URL = "/kr-krad/configuration-test-view-uif-controller?viewId=ConfigurationTestView&methodToCall=start";
036    
037    /** bean id prefix in used in view */
038    private String idPrefix = "ConfigurationTestView-ProgressiveRender-";
039
040    /** bean id suffix for add line controls */
041    String addLineIdSuffix = "InputField_add_control";
042
043
044    @Override
045    protected String getBookmarkUrl() {
046        return BOOKMARK_URL;
047    }
048
049    protected void navigation() throws InterruptedException {
050        waitAndClickKRAD();
051        waitAndClickByXpath("(//a[text()='Configuration Test View'])");
052        switchToWindow(CONFIGURATION_VIEW_WINDOW_TITLE);
053        waitForTitleToEqualKualiPortalIndex();   
054    }
055
056    protected void testConfigurationTestViewNav(JiraAwareFailable failable) throws Exception {
057        navigation();
058        testConfigurationTestView(idPrefix);
059        testAddLineWithSpecificTime(idPrefix, addLineIdSuffix);
060        testAddLineWithAllDay(idPrefix, addLineIdSuffix);
061        testAddLineAllDay(idPrefix, addLineIdSuffix);
062        testInitialColumnSorting(idPrefix);
063        passed();
064    }
065
066    protected void testConfigurationTestViewBookmark(JiraAwareFailable failable) throws Exception {
067        testConfigurationTestView(idPrefix);
068        testAddLineWithSpecificTime(idPrefix, addLineIdSuffix);
069        testAddLineWithAllDay(idPrefix, addLineIdSuffix);
070        testAddLineAllDay(idPrefix, addLineIdSuffix);
071        testInitialColumnSorting(idPrefix);
072        passed();
073    }
074
075    protected void testAddLineWithSpecificTime(String idPrefix, String addLineIdSuffix) throws Exception {
076        waitForElementPresentByXpath("//label[@id='" + idPrefix + "TextInputField_label']");
077        confirmAddLineControlsPresent(idPrefix, addLineIdSuffix);
078        String startTimeId = "//*[@id='" + idPrefix + "StartTime" + addLineIdSuffix + "']";
079        String inputTime = "7:06";
080        waitAndTypeByXpath(startTimeId, inputTime);
081        String amPmSelectLocator = "//*[@id='" + idPrefix + "StartTimeAmPm" + addLineIdSuffix + "']";
082        selectByXpath(amPmSelectLocator, "PM");
083        assertEquals("PM", waitAndGetAttributeByXpath(amPmSelectLocator, "value"));
084        Thread.sleep(5000); //allow for ajax refresh
085        waitAndClickButtonByText("Add");
086        Thread.sleep(5000); //allow for line to be added
087
088        //confirm that line has been added
089        assertTrue("line (//input[@value='7:06'])is not present", isElementPresentByXpath("//input[@value='7:06']"));
090    }
091
092    protected void testAddLineWithAllDay(String idPrefix, String addLineIdSuffix) throws Exception {
093        waitForElementPresentByXpath("//label[@id='" + idPrefix + "TextInputField_label']");
094        confirmAddLineControlsPresent(idPrefix, addLineIdSuffix);
095        String startTimeId = "//*[@id='" + idPrefix + "StartTime" + addLineIdSuffix + "']";
096        String inputTime = "5:20";
097        waitAndTypeByXpath(startTimeId, inputTime);
098        String allDayId = "//*[@id='" + idPrefix + "AllDay" + addLineIdSuffix + "']";
099        waitAndClickByXpath(allDayId);
100        checkForIncidentReport();
101        Thread.sleep(5000); //allow for ajax refresh
102        waitAndClickButtonByText("Add");
103        Thread.sleep(5000); //allow for line to be added
104
105        //confirm that line has been added
106        assertTrue("line (//input[@checked='checked'])is not present", isElementPresentByXpath("//input[@checked='checked']"));
107    }
108
109    protected void testAddLineAllDay(String idPrefix, String addLineIdSuffix) throws Exception {
110        waitForElementPresentByXpath("//label[@id='" + idPrefix + "TextInputField_label']");
111        confirmAddLineControlsPresent(idPrefix, addLineIdSuffix);
112        String allDayId = "//*[@id='" + idPrefix + "AllDay" + addLineIdSuffix + "']";
113        waitAndClickByXpath(allDayId);
114        checkForIncidentReport();
115        Thread.sleep(5000); //allow for ajax refresh
116        waitAndClickButtonByText("Add");
117        Thread.sleep(5000); //allow for line to be added
118
119        //confirm that another line has been added (by checking the number of delete buttons)
120        WebElement table = findElement(By.id("ConfigurationTestView-ProgressiveRender-TimeInfoSection_disclosureContent"));
121        List<WebElement> columns = findElements(By.xpath("//button[contains(text(), 'Delete')]"), table);
122        assertEquals("line was not added", 3, columns.size());
123
124    }
125
126    protected void testInitialColumnSorting(String idPrefix) throws Exception {
127        waitForElementPresentByXpath("//section[@id = '" + idPrefix + "DayEventSection']");
128
129        // confirm that the table is sorted by the second column
130        waitForElementPresentByXpath("//section[@id = '" + idPrefix + "DayEventSection']//table/tbody/tr[1]/td[2]//span[contains(text(), '10/01/2010')]");
131        waitForElementPresentByXpath("//section[@id = '" + idPrefix + "DayEventSection']//table/tbody/tr[2]/td[2]//span[contains(text(), '10/02/2010')]");
132        waitForElementPresentByXpath("//section[@id = '" + idPrefix + "DayEventSection']//table/tbody/tr[3]/td[2]//span[contains(text(), '10/03/2010')]");
133        waitForElementPresentByXpath("//section[@id = '" + idPrefix + "DayEventSection']//table/tbody/tr[4]/td[2]//span[contains(text(), '10/04/2010')]");
134        waitForElementPresentByXpath("//section[@id = '" + idPrefix + "DayEventSection']//table/tbody/tr[5]/td[2]//span[contains(text(), '10/05/2010')]");
135    }
136
137    /**
138     * verify that add line controls are present
139     */
140    protected void confirmAddLineControlsPresent(String idPrefix, String addLineIdSuffix) {
141        String[] addLineIds = {"StartTime", "StartTimeAmPm", "AllDay"};
142
143        for (String id : addLineIds) {
144            String tagId = "//*[@id='" + idPrefix + id + addLineIdSuffix + "']";
145            assertTrue("Did not find id " + tagId, isElementPresentByXpath(tagId));
146        }
147    }
148
149}