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 * @author Kuali Rice Team (rice.collab@kuali.org) 032 */ 033 public class HelpIT { 034 private Selenium selenium; 035 036 // Delay in milliseconds used to allow the help window reload the new help page. 037 // waitForPopUp will not work since the window already exists. 038 private long HELP_WINDOW_LOAD_DELAY = 3000; 039 040 @Before 041 public void setUp() throws Exception { 042 System.setProperty("remote.public.url", "http://localhost:8080/kr-dev/kr-krad/configuration-test-view-uif-controller?viewId=ConfigurationTestView-Help&methodToCall=start"); 043 selenium = new DefaultSelenium("localhost", 4444, "*firefox", System.getProperty("remote.public.url")); 044 selenium.start(); 045 046 // Login 047 selenium.open(System.getProperty("remote.public.url")); 048 assertEquals("Login", selenium.getTitle()); 049 selenium.type("__login_user", "admin"); 050 selenium.click("//input[@value='Login']"); 051 selenium.waitForPageToLoad("30000"); 052 } 053 054 /** 055 * Test the tooltip and external help on the view 056 */ 057 @Test 058 public void testViewHelp() throws Exception { 059 // test tooltip help 060 selenium.mouseOver("css=h1 .uif-headerText-span"); 061 assertEquals("Sample text for view help", selenium.getText("css=td.jquerybubblepopup-innerHtml")); 062 063 // test external help 064 selenium.click("css=input[title=\"Help for Configuration Test View - Help\"]"); 065 selenium.waitForPopUp("HelpWindow", "30000"); 066 selenium.selectPopUp("HelpWindow"); 067 assertEquals("http://www.kuali.org/?view", selenium.getLocation()); 068 selenium.deselectPopUp(); 069 } 070 071 /** 072 * Test the tooltip and external help on the page 073 */ 074 @Test 075 public void testPageHelp() throws Exception { 076 // test tooltip help 077 selenium.mouseOver("css=h2 .uif-headerText-span"); 078 assertEquals("Sample text for page help", selenium.getText("css=td.jquerybubblepopup-innerHtml")); 079 080 // test external help 081 selenium.click("css=input[title=\"Help for Help Page\"]"); 082 selenium.waitForPopUp("HelpWindow", "30000"); 083 selenium.selectPopUp("HelpWindow"); 084 assertEquals("http://www.kuali.org/?page", selenium.getLocation()); 085 selenium.deselectPopUp(); 086 } 087 088 /** 089 * Test the tooltip help on the section and fields 090 */ 091 @Test 092 public void testTooltipHelp() throws Exception { 093 // verify that no tooltips are displayed initially 094 if (selenium.isElementPresent("css=td:contains(\"Sample text for section help - tooltip help\")")) { 095 assertFalse(selenium.isVisible("css=td:contains(\"Sample text for section help - tooltip help\")")); 096 } 097 if (selenium.isElementPresent("css=td:contains(\"Sample text for field help - label left\")")) { 098 assertFalse(selenium.isVisible("css=td:contains(\"Sample text for field help - label left\")")); 099 } 100 if (selenium.isElementPresent("css=td:contains(\"Sample text for field help - label right\")")) { 101 assertFalse(selenium.isVisible("css=td:contains(\"Sample text for field help - label right\")")); 102 } 103 if (selenium.isElementPresent("css=td:contains(\"Sample text for field help - label top\")")) { 104 assertFalse(selenium.isVisible("css=td:contains(\"Sample text for field help - label top\")")); 105 } 106 if (selenium.isElementPresent("css=td:contains(\"Sample text for standalone help widget tooltip which will never be rendered\")")) { 107 assertFalse(selenium.isVisible("css=td:contains(\"Sample text for standalone help widget tooltip which will never be rendered\")")); 108 } 109 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\")")) { 110 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\")")); 111 } 112 if (selenium.isElementPresent("css=td:contains(\"Sample text for label tooltip - this will not be rendered as it is overridden by the help tooltip\")")) { 113 assertFalse(selenium.isVisible("css=td:contains(\"Sample text for label tooltip - this will not be rendered as it is overridden by the help tooltip\")")); 114 } 115 if (selenium.isElementPresent("css=td:contains(\"Sample text for field help - there is also an on-focus tooltip\")")) { 116 assertFalse(selenium.isVisible("css=td:contains(\"Sample text for field help - there is also an on-focus tooltip\")")); 117 } 118 if (selenium.isElementPresent("css=td:contains(\"Sample text for on-focus event tooltip\")")) { 119 assertFalse(selenium.isVisible("css=td:contains(\"Sample text for on-focus event tooltip\")")); 120 } 121 if (selenium.isElementPresent("css=td:contains(\"Sample text for check box help\")")) { 122 assertFalse(selenium.isVisible("css=td:contains(\"Sample text for check box help\")")); 123 } 124 125 // test tooltip help of section header 126 selenium.mouseOver("css=#ConfigurationTestView-Help-Section1 h3 .uif-headerText-span"); 127 assertTrue(selenium.isVisible("css=td:contains(\"Sample text for section help - tooltip help\")")); 128 selenium.mouseOut("css=#ConfigurationTestView-Help-Section1 h3 .uif-headerText-span"); 129 assertFalse(selenium.isVisible("css=td:contains(\"Sample text for section help - tooltip help\")")); 130 131 // verify that no external help exist 132 assertFalse(selenium.isElementPresent("css=#ConfigurationTestView-Help-Section1 input.uif-helpImage")); 133 134 // test tooltip help of field with label to the left 135 selenium.mouseOver("id=field-label-left_label"); 136 assertTrue(selenium.isVisible("css=td:contains(\"Sample text for field help - label left\")")); 137 selenium.mouseOut("id=field-label-left_label"); 138 assertFalse(selenium.isVisible("css=td:contains(\"Sample text for field help - label left\")")); 139 140 // test tooltip help of field with label to the right 141 selenium.mouseOver("id=field-label-right_label"); 142 assertTrue(selenium.isVisible("css=td:contains(\"Sample text for field help - label righ\")")); 143 selenium.mouseOut("id=field-label-right_label"); 144 assertFalse(selenium.isVisible("css=td:contains(\"Sample text for field help - label right\")")); 145 146 // test tooltip help of field with label to the top 147 selenium.mouseOver("id=field-label-top_label"); 148 assertTrue(selenium.isVisible("css=td:contains(\"Sample text for field help - label top\")")); 149 selenium.mouseOut("id=field-label-top_label"); 150 assertFalse(selenium.isVisible("css=td:contains(\"Sample text for field help - label top\")")); 151 152 // verify that standalone help with tooltip is not rendered 153 assertFalse(selenium.isElementPresent("id=standalone-help-not-rendered")); 154 155 // test tooltip help when it overrides a tooltip 156 selenium.mouseOver("id=override-tooltip_label"); 157 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\")")); 158 if (selenium.isElementPresent("css=td:contains(\"Sample text for label tooltip - this will not be rendered as it is overridden by the help tooltip\")")) { 159 assertFalse(selenium.isVisible("css=td:contains(\"Sample text for label tooltip - this will not be rendered as it is overridden by the help tooltip\")")); 160 } 161 selenium.mouseOut("id=override-tooltip_label"); 162 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\")")); 163 164 // test tooltip help in conjunction with a focus event tooltip 165 selenium.mouseOver("id=on-focus-tooltip_control"); 166 assertTrue(selenium.isVisible("css=td:contains(\"Sample text for on-focus event tooltip\")")); 167 selenium.mouseOver("id=on-focus-tooltip_label"); 168 assertTrue(selenium.isVisible("css=td:contains(\"Sample text for field help - there is also an on-focus tooltip\")")); 169 selenium.mouseOut("id=on-focus-tooltip_control"); 170 selenium.mouseOut("id=on-focus-tooltip_label"); 171 assertFalse(selenium.isVisible("css=td:contains(\"Sample text for field help - there is also an on-focus tooltip\")")); 172 assertFalse(selenium.isVisible("css=td:contains(\"Sample text for on-focus event tooltip\")")); 173 174 // test tooltip help against a check box - help contains html 175 selenium.mouseOver("id=checkbox_label"); 176 assertTrue(selenium.isVisible("css=td:contains(\"Sample text for check box help\")")); 177 selenium.mouseOut("id=checkbox_label"); 178 assertFalse(selenium.isVisible("css=td:contains(\"Sample text for check box help\")")); 179 } 180 181 /** 182 * Test the tooltip help on the sub-section and fields that are display only 183 */ 184 @Test 185 public void testDisplayOnlyTooltipHelp() throws Exception { 186 // verify that no tooltips are displayed initially 187 if (selenium.isElementPresent("css=td:contains(\"Sample text for sub-section help\")")) { 188 assertFalse(selenium.isVisible("css=td:contains(\"Sample text for sub-section help\")")); 189 } 190 if (selenium.isElementPresent("css=td:contains(\"Sample text for read only field help\")")) { 191 assertFalse(selenium.isVisible("css=td:contains(\"Sample text for read only field help\")")); 192 } 193 194 // test tooltip help of sub-section header 195 selenium.mouseOver("css=h4 .uif-headerText-span"); 196 assertTrue(selenium.isVisible("css=td:contains(\"Sample text for sub-section help\")")); 197 selenium.mouseOut("css=h4 .uif-headerText-span"); 198 assertFalse(selenium.isVisible("css=td:contains(\"Sample text for sub-section help\")")); 199 200 // test tooltip help of display only data field 201 selenium.mouseOver("css=#display-field label"); 202 assertTrue(selenium.isVisible("css=td:contains(\"Sample text for read only field help\")")); 203 selenium.mouseOut("css=#display-field label"); 204 assertFalse(selenium.isVisible("css=td:contains(\"Sample text for read only field help\")")); 205 } 206 207 /** 208 * Test the tooltip help on the section and fields with no content 209 */ 210 @Test 211 public void testMissingTooltipHelp() throws Exception { 212 // verify that no tooltips are displayed initially 213 assertFalse(selenium.isElementPresent("css=.jquerybubblepopup")); 214 215 // verify that no external help exist 216 assertFalse(selenium.isElementPresent("css=#ConfigurationTestView-Help-Section2 input.uif-helpImage")); 217 218 // test tooltip help of section header 219 selenium.mouseOver("css=#ConfigurationTestView-Help-Section2 h3 .uif-headerText-span"); 220 assertFalse(selenium.isElementPresent("css=.jquerybubblepopup")); 221 selenium.mouseOut("css=#ConfigurationTestView-Help-Section1 h3 .uif-headerText-span"); 222 assertFalse(selenium.isElementPresent("css=.jquerybubblepopup")); 223 224 // test tooltip help of field 225 selenium.mouseOver("id=missing-tooltip-help_label"); 226 assertFalse(selenium.isElementPresent("css=.jquerybubblepopup")); 227 selenium.mouseOut("id=missing-tooltip-help_label"); 228 assertFalse(selenium.isElementPresent("css=.jquerybubblepopup")); 229 } 230 231 /** 232 * Test the external help on the section and fields 233 */ 234 // TODO: The test fails due to the javascript error 235 // Error: Permission denied to access property 'close' 236 // Source File: http://localhost:8080/kr-dev/krad/scripts/krad.utility.js 237 // Line: 657 238 // when closing the help window. It works when selenium is not running. 239 @Ignore 240 @Test 241 public void testExternalHelp() throws Exception { 242 243 // test external help of section 244 selenium.click("css=input[title=\"Help for External Help\"]"); 245 selenium.waitForPopUp("HelpWindow", "30000"); 246 selenium.selectPopUp("HelpWindow"); 247 assertEquals("http://www.kuali.org/?section", selenium.getLocation()); 248 selenium.deselectPopUp(); 249 250 // test external help of field with label left 251 selenium.click("css=#field-label-left-external-help .uif-helpImage"); 252 selenium.waitForPopUp("HelpWindow", "30000"); 253 Thread.sleep(HELP_WINDOW_LOAD_DELAY); 254 selenium.selectPopUp("HelpWindow"); 255 assertEquals("http://www.kuali.org/?label_left", selenium.getLocation()); 256 selenium.deselectPopUp(); 257 258 // test external help of field with label right 259 selenium.click("css=#field-label-right-external-help .uif-helpImage"); 260 selenium.waitForPopUp("HelpWindow", "30000"); 261 Thread.sleep(HELP_WINDOW_LOAD_DELAY); 262 selenium.selectPopUp("HelpWindow"); 263 assertEquals("http://www.kuali.org/?label_right", selenium.getLocation()); 264 selenium.deselectPopUp(); 265 266 // test external help of field with label top and help URL from system parameters 267 // TODO: insert database data 268 // selenium.click("css=#field-label-top-external-help .uif-helpImage"); 269 // selenium.waitForPopUp("HelpWindow", "30000"); 270 // Thread.sleep(HELP_WINDOW_LOAD_DELAY); 271 // selenium.selectPopUp("HelpWindow"); 272 // assertEquals("http://www.kuali.org/?label_top", selenium.getLocation()); 273 // selenium.deselectPopUp(); 274 275 // test external help of standalone help widget 276 selenium.click("css=#standalone-external-help .uif-helpImage"); 277 selenium.waitForPopUp("HelpWindow", "30000"); 278 Thread.sleep(HELP_WINDOW_LOAD_DELAY); 279 selenium.selectPopUp("HelpWindow"); 280 assertEquals("http://www.kuali.org/?label_top", selenium.getLocation()); 281 selenium.deselectPopUp(); 282 } 283 284 /** 285 * Test the external help on the sub-section and display only fields 286 */ 287 @Ignore 288 @Test 289 public void testDisplayOnlyExternalHelp() throws Exception { 290 //TODO: create test 291 } 292 293 /** 294 * Test the external help on the section and fields with missing help URL 295 */ 296 @Ignore 297 @Test 298 public void testMissingExternalHelp() throws Exception { 299 //TODO: create test 300 } 301 302 /** 303 * Test the tooltip help and external help when both are specified 304 */ 305 @Ignore 306 @Test 307 public void testTooltipExternalHelp() throws Exception { 308 //TODO: create test 309 } 310 311 @After 312 public void tearDown() throws Exception { 313 selenium.stop(); 314 } 315 316 }