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;
020
021/**
022 * @author Kuali Rice Team (rice.collab@kuali.org)
023 */
024public abstract class HelpAftBase extends WebDriverLegacyITBase {
025
026    /**
027     * /kr-krad/configuration-test-view-uif-controller?viewId=ConfigurationTestView&methodToCall=start&pageId=ConfigurationTestView-Help-Page
028     */
029    public static final String BOOKMARK_URL = "/kr-krad/configuration-test-view-uif-controller?viewId=ConfigurationTestView&methodToCall=start&pageId=ConfigurationTestView-Help-Page";
030    public static final String HELP_FOR_CONFIGURATION_TEST_VIEW_XPATH =
031            "//a[@title='Help for Configuration Test View']";
032
033    @Override
034    protected String getBookmarkUrl() {
035        return BOOKMARK_URL;
036    }
037
038    protected void navigation() throws Exception {
039        waitAndClickKRAD();
040        waitAndClickByXpath(CONFIGURATION_VIEW_XPATH);
041        switchToWindow(CONFIGURATION_VIEW_WINDOW_TITLE);
042        waitAndClickByLinkText("Help");
043        Thread.sleep(5000);
044    }
045
046    protected void testHelpNav(JiraAwareFailable failable) throws Exception {
047        navigation();
048        testViewHelp();
049        testPageHelp();
050        testTooltipHelp();
051        testDisplayOnlyTooltipHelp();
052        testMissingTooltipHelp();
053        passed();
054    }
055
056    protected void testHelpBookmark(JiraAwareFailable failable) throws Exception {
057        testViewHelp();
058        testPageHelp();
059        testTooltipHelp();
060        testDisplayOnlyTooltipHelp();
061        testMissingTooltipHelp();
062        passed();
063    }
064
065
066    /**
067     * Test the tooltip and external help on the page
068     */
069    protected void testPageHelp() throws Exception {
070        // test tooltip help
071        fireMouseOverEventByXpath("//a/span[@class='uif-headerText-span']");
072        waitForTextPresent("Sample text for section help - tooltip help");
073
074        // test external help
075        waitAndClickByXpath(HELP_FOR_CONFIGURATION_TEST_VIEW_XPATH);
076        Thread.sleep(5000);
077        switchToWindow("Kuali Foundation");
078        Thread.sleep(5000);
079        switchToWindow(CONFIGURATION_VIEW_WINDOW_TITLE);
080    }
081
082    /**
083     * Test the tooltip help on the section and fields
084     */
085    protected void testTooltipHelp() throws Exception {
086        // verify that no tooltips are displayed initially
087        if (isElementPresentByXpath("//td[contains(text(),'Sample text for section help - tooltip help')]")) {
088            assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for section help - tooltip help')]"));
089        }
090
091        if (isElementPresentByXpath("//td[contains(text(),'Sample text for field help - label left')]")) {
092            assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for field help - label left')]"));
093        }
094
095        if (isElementPresentByXpath("//td[contains(text(),'Sample text for field help - label right')]")) {
096            assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for field help - label right')]"));
097        }
098
099        if (isElementPresentByXpath("//td[contains(text(),'Sample text for field help - label top')]")) {
100            assertFalse(isVisibleByXpath("//td[contains(text(),'Sample text for field help - label top')]"));
101        }
102
103        if (isElementPresentByXpath("//td[contains(text(),'Sample text for standalone help widget tooltip which will never be rendered')]")) {
104            assertFalse(isVisibleByXpath("//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            assertFalse(isVisibleByXpath("//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            assertFalse(isVisibleByXpath("//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            assertFalse(isVisibleByXpath("//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            assertFalse(isVisibleByXpath("//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            assertFalse(isVisibleByXpath("//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        waitForElementPresentByXpath("//div[@class='popover top in']");
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        waitForElementPresentByXpath("//div[@class='popover top in']");
137
138        // test tooltip help of field with label to the right
139        fireMouseOverEventByXpath("//label[@id='field-label-right_label']");
140        waitForElementPresentByXpath("//div[@class='popover top in']");
141
142        // test tooltip help of field with label to the top
143        fireMouseOverEventByXpath("//label[@id='field-label-top_label']");
144        waitForElementPresentByXpath("//div[@class='popover top in']");
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        waitForElementPresentByXpath("//div[@class='popover top in']");
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            assertFalse(isVisibleByXpath("//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        waitForElementPresentByXpath("//div[@class='popover top in']");
159        fireMouseOverEventByXpath("//label[@id='on-focus-tooltip_label']");
160        waitForElementPresentByXpath("//div[@class='popover top in']");
161
162        // test tooltip help against a check box - help contains html
163        fireMouseOverEventByXpath("//label[@id='checkbox_label']");
164        waitForElementPresentByXpath("//div[@class='popover top in']");
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(HELP_FOR_CONFIGURATION_TEST_VIEW_XPATH);
206        Thread.sleep(5000);
207        switchToWindow("Kuali Foundation");
208        Thread.sleep(5000);
209        switchToWindow(CONFIGURATION_VIEW_WINDOW_TITLE);
210    }
211}