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;
021
022/**
023 * @author Kuali Rice Team (rice.collab@kuali.org)
024 */
025public abstract class HelpAftBase extends WebDriverLegacyITBase {
026
027    /**
028     * /kr-krad/configuration-test-view-uif-controller?viewId=ConfigurationTestView&methodToCall=start&pageId=ConfigurationTestView-Help-Page
029     */
030    public static final String BOOKMARK_URL = "/kr-krad/configuration-test-view-uif-controller?viewId=ConfigurationTestView&methodToCall=start&pageId=ConfigurationTestView-Help-Page";
031   
032    @Override
033    protected String getBookmarkUrl() {
034        return BOOKMARK_URL;
035    }
036
037    protected void navigation() throws Exception {
038        waitAndClickKRAD();
039        waitAndClickByXpath(CONFIGURATION_VIEW_XPATH);
040        switchToWindow(CONFIGURATION_VIEW_WINDOW_TITLE);
041        waitAndClickByLinkText("Help");
042        Thread.sleep(5000);
043    }
044
045    protected void testHelpNav(JiraAwareFailable failable) throws Exception {
046        navigation();
047        testViewHelp();
048        testPageHelp();
049        testTooltipHelp();
050        testDisplayOnlyTooltipHelp();
051        testMissingTooltipHelp();
052        passed();
053    }
054
055    protected void testHelpBookmark(JiraAwareFailable failable) throws Exception {
056        testViewHelp();
057        testPageHelp();
058        testTooltipHelp();
059        testDisplayOnlyTooltipHelp();
060        testMissingTooltipHelp();
061        passed();
062    }
063
064
065    /**
066     * Test the tooltip and external help on the page
067     */
068    protected void testPageHelp() throws Exception {
069        // test tooltip help
070        fireMouseOverEventByXpath("//a/span[@class='uif-headerText-span']");
071        waitForTextPresent("Sample text for section help - tooltip help");
072
073        // test external help
074        waitAndClickByXpath("//input[@alt='Help for Configuration Test View']");
075        Thread.sleep(5000);
076        switchToWindow("Kuali Foundation");
077        Thread.sleep(5000);
078        switchToWindow(CONFIGURATION_VIEW_WINDOW_TITLE);
079    }
080
081    /**
082     * Test the tooltip help on the section and fields
083     */
084    protected void testTooltipHelp() throws Exception {
085        // verify that no tooltips are displayed initially
086        if (isElementPresentByXpath("//td[contains(text(),'Sample text for section help - tooltip help')]")) {
087            waitNotVisibleByXpath("//td[contains(text(),'Sample text for section help - tooltip help')]");
088        }
089
090        if (isElementPresentByXpath("//td[contains(text(),'Sample text for field help - label left')]")) {
091            waitNotVisibleByXpath("//td[contains(text(),'Sample text for field help - label left')]");
092        }
093
094        if (isElementPresentByXpath("//td[contains(text(),'Sample text for field help - label right')]")) {
095            waitNotVisibleByXpath("//td[contains(text(),'Sample text for field help - label right')]");
096        }
097
098// Comment out to see how CI handles the following tests
099//        if (isElementPresentByXpath("//td[contains(text(),'Sample text for field help - label top')]")) {
100//            waitNotVisibleByXpath("//td[contains(text(),'Sample text for field help - label top')]", "passes locally");
101//        }
102
103        if (isElementPresentByXpath("//td[contains(text(),'Sample text for standalone help widget tooltip which will never be rendered')]")) {
104            waitNotVisibleByXpath("//td[contains(text(),'Sample text for standalone help widget tooltip which will never be rendered')]");
105        }
106
107        if (isElementPresentByXpath("//td[contains(text(),'Sample text for field help - there is also a tooltip on the label but it is overridden by the help tooltip')]")) {
108            waitNotVisibleByXpath("//td[contains(text(),'Sample text for field help - there is also a tooltip on the label but it is overridden by the help tooltip')]");
109        }
110
111        if (isElementPresentByXpath("//td[contains(text(),'Sample text for label tooltip - this will not be rendered as it is overridden by the help tooltip')]")) {
112            waitNotVisibleByXpath("//td[contains(text(),'Sample text for label tooltip - this will not be rendered as it is overridden by the help tooltip')]");
113        }
114
115        if (isElementPresentByXpath("//td[contains(text(),'Sample text for field help - there is also an on-focus tooltip')]")) {
116            waitNotVisibleByXpath("//td[contains(text(),'Sample text for field help - there is also an on-focus tooltip')]");
117        }
118
119        if (isElementPresentByXpath("//td[contains(text(),'Sample text for on-focus event tooltip')]")) {
120            waitNotVisibleByXpath("//td[contains(text(),'Sample text for on-focus event tooltip')]");
121        }
122
123        if (isElementPresentByXpath("//td[contains(text(),'Sample text for check box help')]")) {
124            waitNotVisibleByXpath("//td[contains(text(),'Sample text for check box help')]");
125        }
126
127        // test tooltip help of section header
128        fireMouseOverEventByXpath("//section[@id='ConfigurationTestView-Help-Section1']/header/h3[@class='uif-headerText']");
129        waitIsVisible(By.xpath("//td[contains(text(),'Sample text for section help - tooltip help')]"));
130
131        // verify that no external help exist
132        assertFalse(isElementPresent("#ConfigurationTestView-Help-Section1 input.uif-helpImage"));
133
134        // test tooltip help of field with label to the left
135        fireMouseOverEventByXpath("//label[@id='field-label-left_label']");
136        waitIsVisible(By.xpath("//td[contains(text(),'Sample text for field help - label left')]"));
137
138        // test tooltip help of field with label to the right
139        fireMouseOverEventByXpath("//label[@id='field-label-right_label']");
140        waitIsVisible(By.xpath("//td[contains(text(),'Sample text for field help - label right')]"));
141
142        // test tooltip help of field with label to the top
143        fireMouseOverEventByXpath("//label[@id='field-label-top_label']");
144        waitIsVisible(By.xpath("//td[contains(text(),'Sample text for field help - label top')]"));
145
146        // verify that standalone help with tooltip is not rendered
147        assertFalse(isElementPresentByXpath("//*[@id='standalone-help-not-rendered']"));
148
149        // test tooltip help when it overrides a tooltip
150        fireMouseOverEventByXpath("//label[@id='override-tooltip_label']");
151        waitIsVisible(By.xpath("//td[contains(text(),'Sample text for field help - there is also a tooltip on the label but it is overridden by the help tooltip')]"));
152        if (isElementPresentByXpath("//td[contains(text(),'Sample text for label tooltip - this will not be rendered as it is overridden by the help tooltip')]")) {
153            waitNotVisibleByXpath("//td[contains(text(),'Sample text for label tooltip - this will not be rendered as it is overridden by the help tooltip')]");
154        }
155
156        // test tooltip help in conjunction with a focus event tooltip
157        fireMouseOverEventByXpath("//input[@id='on-focus-tooltip_control']");
158        waitIsVisible(By.xpath("//td[contains(text(),'Sample text for on-focus event tooltip')]"));
159        fireMouseOverEventByXpath("//label[@id='on-focus-tooltip_label']");
160        waitIsVisible(By.xpath("//td[contains(text(),'Sample text for field help - there is also an on-focus tooltip')]"));
161
162        // test tooltip help against a check box - help contains html
163        fireMouseOverEventByXpath("//label[@id='checkbox_label']");
164        waitIsVisible(By.xpath("//td[contains(text(),'Sample text for check box help')]"));
165    }
166
167    /**
168     * Test the tooltip help on the sub-section and fields that are display only
169     */
170    protected void testDisplayOnlyTooltipHelp() throws Exception {
171
172        // test tooltip help of sub-section header
173        fireMouseOverEventByXpath("//section[@data-parent='ConfigurationTestView-Help-Section1']/header/h4");
174        waitForElementPresentByXpath("//td[contains(text(),'Sample text for sub-section help')]");
175
176        // test tooltip help of display only data field
177        fireMouseOverEventByXpath("//label[@for='display-field_control']");
178        waitForElementPresentByXpath("//td[contains(text(),'Sample text for read only field help')]");
179    }
180
181    /**
182     * Test the tooltip help on the section and fields with no content
183     */
184    protected void testMissingTooltipHelp() throws Exception {
185
186        // test tooltip help of section header
187        fireMouseOverEventByXpath("//section[@id='ConfigurationTestView-Help-Section2']/div");
188        assertFalse(isElementPresentByXpath("//div[@class='jquerybubblepopup jquerybubblepopup-black' and @style='opacity: 0; top: 627px; left: 2px; position: absolute; display: block;']"));
189
190        // test tooltip help of field
191        fireMouseOverEventByXpath("//label[@id='missing-tooltip-help_label']");
192        assertFalse(isElementPresentByXpath("//div[@class='jquerybubblepopup jquerybubblepopup-black' and @style='opacity: 0; top: 627px; left: 2px; position: absolute; display: block;']"));
193    }
194
195    /**
196     * Test the tooltip and external help on the view
197     */
198    protected void testViewHelp() throws Exception {
199        // test tooltip help
200        fireEvent("field102", "blur");
201        fireMouseOverEventByXpath("//label[@id='field-label-left_label']");
202        waitForTextPresent("Sample text for field help - label left");
203
204        // test external help
205        waitAndClickByXpath("//input[@alt='Help for Configuration Test View']");
206        Thread.sleep(5000);
207        switchToWindow("Kuali Foundation");
208        Thread.sleep(5000);
209        switchToWindow(CONFIGURATION_VIEW_WINDOW_TITLE);
210    }
211}