001    /**
002     * Copyright 2005-2011 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.samplu.krad.configview;
017    
018    import org.junit.After;
019    import org.junit.Before;
020    import org.junit.Ignore;
021    import org.junit.Test;
022    
023    import com.thoughtworks.selenium.DefaultSelenium;
024    import com.thoughtworks.selenium.Selenium;
025    
026    import static org.junit.Assert.*;
027    
028    /**
029     * Test the help widget
030     *
031     * <p>
032     * Selenium RC does not allow us to test the external help popup windows due to an error on JavaScrips window.close
033     * method when selenium is running.  To test the external help we use the {@link HelpIT2} test
034     * which utilizes WebDriver.  Unfortunately due to a WebDriver bug/feature we can't test the tooltip help there.
035     * </p>
036     *
037     * @author Kuali Rice Team (rice.collab@kuali.org)
038     */
039    public class HelpIT {
040        private Selenium selenium;
041    
042        // Delay in milliseconds used to allow the help window reload the new help page.
043        // waitForPopUp will not work since the window already exists.
044        private long HELP_WINDOW_LOAD_DELAY = 3000;
045    
046        @Before
047        public void setUp() throws Exception {
048            System.setProperty("remote.public.url", "http://localhost:8080/kr-dev/kr-krad/configuration-test-view-uif-controller?viewId=ConfigurationTestView-Help&methodToCall=start");
049            selenium = new DefaultSelenium("localhost", 4444, "*firefox", System.getProperty("remote.public.url"));
050            selenium.start();
051    
052            // Login
053            selenium.open(System.getProperty("remote.public.url"));
054            assertEquals("Login", selenium.getTitle());
055            selenium.type("__login_user", "admin");
056            selenium.click("//input[@value='Login']");
057            selenium.waitForPageToLoad("30000");
058        }
059    
060        /**
061         * Test the tooltip and external help on the view
062         */
063        @Test
064        public void testViewHelp() throws Exception {
065            // test tooltip help
066            selenium.mouseOver("css=h1 .uif-headerText-span");
067            assertEquals("Sample text for view help", selenium.getText("css=td.jquerybubblepopup-innerHtml"));
068    
069            // test external help
070            selenium.click("css=input[title=\"Help for Configuration Test View - Help\"]");
071            selenium.waitForPopUp("HelpWindow", "30000");
072            selenium.selectPopUp("HelpWindow");
073            assertEquals("http://www.kuali.org/?view", selenium.getLocation());
074            selenium.deselectPopUp();
075        }
076    
077        /**
078         * Test the tooltip and external help on the page
079         */
080        @Test
081        public void testPageHelp() throws Exception {
082            // test tooltip help
083            selenium.mouseOver("css=h2 .uif-headerText-span");
084            assertEquals("Sample text for page help", selenium.getText("css=td.jquerybubblepopup-innerHtml"));
085    
086            // test external help
087            selenium.click("css=input[title=\"Help for Help Page\"]");
088            selenium.waitForPopUp("HelpWindow", "30000");
089            selenium.selectPopUp("HelpWindow");
090            assertEquals("http://www.kuali.org/?page", selenium.getLocation());
091            selenium.deselectPopUp();
092        }
093    
094        /**
095         * Test the tooltip help on the section and fields
096         */
097        @Test
098        public void testTooltipHelp() throws Exception {
099            // verify that no tooltips are displayed initially
100            if (selenium.isElementPresent("css=td:contains(\"Sample text for section help - tooltip help\")")) {
101                assertFalse(selenium.isVisible("css=td:contains(\"Sample text for section help - tooltip help\")"));
102            }
103            if (selenium.isElementPresent("css=td:contains(\"Sample text for field help - label left\")")) {
104                assertFalse(selenium.isVisible("css=td:contains(\"Sample text for field help - label left\")"));
105            }
106            if (selenium.isElementPresent("css=td:contains(\"Sample text for field help - label right\")")) {
107                assertFalse(selenium.isVisible("css=td:contains(\"Sample text for field help - label right\")"));
108            }
109            if (selenium.isElementPresent("css=td:contains(\"Sample text for field help - label top\")")) {
110                assertFalse(selenium.isVisible("css=td:contains(\"Sample text for field help - label top\")"));
111            }
112            if (selenium.isElementPresent("css=td:contains(\"Sample text for standalone help widget tooltip which will never be rendered\")")) {
113                assertFalse(selenium.isVisible("css=td:contains(\"Sample text for standalone help widget tooltip which will never be rendered\")"));
114            }
115            if (selenium.isElementPresent("css=td:contains(\"Sample text for field help - there is also a tooltip on the label but it is overridden by the help tooltip\")")) {
116                assertFalse(selenium.isVisible("css=td:contains(\"Sample text for field help - there is also a tooltip on the label but it is overridden by the help tooltip\")"));
117            }
118            if (selenium.isElementPresent("css=td:contains(\"Sample text for label tooltip - this will not be rendered as it is overridden by the help tooltip\")")) {
119                assertFalse(selenium.isVisible("css=td:contains(\"Sample text for label tooltip - this will not be rendered as it is overridden by the help tooltip\")"));
120            }
121            if (selenium.isElementPresent("css=td:contains(\"Sample text for field help - there is also an on-focus tooltip\")")) {
122                assertFalse(selenium.isVisible("css=td:contains(\"Sample text for field help - there is also an on-focus tooltip\")"));
123            }
124            if (selenium.isElementPresent("css=td:contains(\"Sample text for on-focus event tooltip\")")) {
125                assertFalse(selenium.isVisible("css=td:contains(\"Sample text for on-focus event tooltip\")"));
126            }
127            if (selenium.isElementPresent("css=td:contains(\"Sample text for check box help\")")) {
128                assertFalse(selenium.isVisible("css=td:contains(\"Sample text for check box help\")"));
129            }
130    
131            // test tooltip help of section header
132            selenium.mouseOver("css=#ConfigurationTestView-Help-Section1 h3 .uif-headerText-span");
133            assertTrue(selenium.isVisible("css=td:contains(\"Sample text for section help - tooltip help\")"));
134            selenium.mouseOut("css=#ConfigurationTestView-Help-Section1 h3 .uif-headerText-span");
135            assertFalse(selenium.isVisible("css=td:contains(\"Sample text for section help - tooltip help\")"));
136    
137            // verify that no external help exist
138            assertFalse(selenium.isElementPresent("css=#ConfigurationTestView-Help-Section1 input.uif-helpImage"));
139    
140            // test tooltip help of field with label to the left
141            selenium.mouseOver("id=field-label-left_label");
142            assertTrue(selenium.isVisible("css=td:contains(\"Sample text for field help - label left\")"));
143            selenium.mouseOut("id=field-label-left_label");
144            assertFalse(selenium.isVisible("css=td:contains(\"Sample text for field help - label left\")"));
145    
146            // test tooltip help of field with label to the right
147            selenium.mouseOver("id=field-label-right_label");
148            assertTrue(selenium.isVisible("css=td:contains(\"Sample text for field help - label righ\")"));
149            selenium.mouseOut("id=field-label-right_label");
150            assertFalse(selenium.isVisible("css=td:contains(\"Sample text for field help - label right\")"));
151    
152            // test tooltip help of field with label to the top
153            selenium.mouseOver("id=field-label-top_label");
154            assertTrue(selenium.isVisible("css=td:contains(\"Sample text for field help - label top\")"));
155            selenium.mouseOut("id=field-label-top_label");
156            assertFalse(selenium.isVisible("css=td:contains(\"Sample text for field help - label top\")"));
157    
158            // verify that standalone help with tooltip is not rendered
159            assertFalse(selenium.isElementPresent("id=standalone-help-not-rendered"));
160    
161            // test tooltip help when it overrides a tooltip
162            selenium.mouseOver("id=override-tooltip_label");
163            assertTrue(selenium.isVisible("css=td:contains(\"Sample text for field help - there is also a tooltip on the label but it is overridden by the help tooltip\")"));
164            if (selenium.isElementPresent("css=td:contains(\"Sample text for label tooltip - this will not be rendered as it is overridden by the help tooltip\")")) {
165                assertFalse(selenium.isVisible("css=td:contains(\"Sample text for label tooltip - this will not be rendered as it is overridden by the help tooltip\")"));
166            }
167            selenium.mouseOut("id=override-tooltip_label");
168            assertFalse(selenium.isVisible("css=td:contains(\"Sample text for field help - there is also a tooltip on the label but it is overridden by the help tooltip\")"));
169    
170            // test tooltip help in conjunction with a focus event tooltip
171            selenium.mouseOver("id=on-focus-tooltip_control");
172            assertTrue(selenium.isVisible("css=td:contains(\"Sample text for on-focus event tooltip\")"));
173            selenium.mouseOver("id=on-focus-tooltip_label");
174            assertTrue(selenium.isVisible("css=td:contains(\"Sample text for field help - there is also an on-focus tooltip\")"));
175            selenium.mouseOut("id=on-focus-tooltip_control");
176            selenium.mouseOut("id=on-focus-tooltip_label");
177            assertFalse(selenium.isVisible("css=td:contains(\"Sample text for field help - there is also an on-focus tooltip\")"));
178            assertFalse(selenium.isVisible("css=td:contains(\"Sample text for on-focus event tooltip\")"));
179    
180            // test tooltip help against a check box - help contains html
181            selenium.mouseOver("id=checkbox_label");
182            assertTrue(selenium.isVisible("css=td:contains(\"Sample text for check box help\")"));
183            selenium.mouseOut("id=checkbox_label");
184            assertFalse(selenium.isVisible("css=td:contains(\"Sample text for check box help\")"));
185        }
186    
187        /**
188         * Test the tooltip help on the sub-section and fields that are display only
189         */
190        @Test
191        public void testDisplayOnlyTooltipHelp() throws Exception {
192            // verify that no tooltips are displayed initially
193            if (selenium.isElementPresent("css=td:contains(\"Sample text for sub-section help\")")) {
194                assertFalse(selenium.isVisible("css=td:contains(\"Sample text for sub-section help\")"));
195            }
196            if (selenium.isElementPresent("css=td:contains(\"Sample text for read only field help\")")) {
197                assertFalse(selenium.isVisible("css=td:contains(\"Sample text for read only field help\")"));
198            }
199    
200            // test tooltip help of sub-section header
201            selenium.mouseOver("css=h4 .uif-headerText-span");
202            assertTrue(selenium.isVisible("css=td:contains(\"Sample text for sub-section help\")"));
203            selenium.mouseOut("css=h4 .uif-headerText-span");
204            assertFalse(selenium.isVisible("css=td:contains(\"Sample text for sub-section help\")"));
205    
206            // test tooltip help of display only data field
207            selenium.mouseOver("css=#display-field label");
208            assertTrue(selenium.isVisible("css=td:contains(\"Sample text for read only field help\")"));
209            selenium.mouseOut("css=#display-field label");
210            assertFalse(selenium.isVisible("css=td:contains(\"Sample text for read only field help\")"));
211        }
212    
213        /**
214         * Test the tooltip help on the section and fields with no content
215         */
216        @Test
217        public void testMissingTooltipHelp() throws Exception {
218            // verify that no tooltips are displayed initially
219            assertFalse(selenium.isElementPresent("css=.jquerybubblepopup"));
220    
221            // verify that no external help exist
222            assertFalse(selenium.isElementPresent("css=#ConfigurationTestView-Help-Section2 input.uif-helpImage"));
223    
224            // test tooltip help of section header
225            selenium.mouseOver("css=#ConfigurationTestView-Help-Section2 h3 .uif-headerText-span");
226            assertFalse(selenium.isElementPresent("css=.jquerybubblepopup"));
227            selenium.mouseOut("css=#ConfigurationTestView-Help-Section1 h3 .uif-headerText-span");
228            assertFalse(selenium.isElementPresent("css=.jquerybubblepopup"));
229    
230            // test tooltip help of field
231            selenium.mouseOver("id=missing-tooltip-help_label");
232            assertFalse(selenium.isElementPresent("css=.jquerybubblepopup"));
233            selenium.mouseOut("id=missing-tooltip-help_label");
234            assertFalse(selenium.isElementPresent("css=.jquerybubblepopup"));
235        }
236    
237       @After
238        public void tearDown() throws Exception {
239            selenium.stop();
240        }
241    
242    }