001 /* 002 * Copyright 2006-2012 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 017 package edu.samplu.travel.krad.test; 018 019 import com.thoughtworks.selenium.DefaultSelenium; 020 import org.junit.After; 021 import org.junit.Assert; 022 import org.junit.Before; 023 import org.junit.Ignore; 024 import org.junit.Test; 025 import org.kuali.rice.core.framework.resourceloader.SpringResourceLoader; 026 import org.kuali.rice.krad.uif.component.Component; 027 import org.kuali.rice.krad.uif.view.View; 028 029 import static junit.framework.Assert.*; 030 031 /** 032 * test that configuration test view items work as expected 033 * 034 * @author Kuali Rice Team (rice.collab@kuali.org) 035 */ 036 public class ConfigurationTestViewIT { 037 private DefaultSelenium selenium; 038 /** bean id prefix in used in view */ 039 private String idPrefix = "ConfigurationTestView-ProgressiveRender-"; 040 /** bean id suffix for add line controls */ 041 String addLineIdSuffix = "InputField_add_control"; 042 @Before 043 public void setUp() throws Exception { 044 selenium = new DefaultSelenium("localhost", 4444, "*chrome", System.getProperty("remote.public.url")); 045 selenium.start(); 046 } 047 048 @Test 049 /** 050 * test for text input field label - style setting and refreshWhenChanged for components not in collection 051 */ 052 public void testConfigurationTestView() throws Exception { 053 openConfigurationTestView(); 054 055 // testing for https://groups.google.com/a/kuali.org/group/rice.usergroup.krad/browse_thread/thread/1e501d07c1141aad# 056 String styleValue = selenium.getAttribute("//span[@id='" + idPrefix + "TextInputField_label_span']@style"); 057 // log.info("styleValue is " + styleValue); 058 Assert.assertTrue(idPrefix + "textInputField label does not contain expected style", styleValue.replace(" ", "").contains( 059 "color:red")); 060 061 // testing for refreshWhenChanged when using spel expressions 062 selenium.selectFrame("iframeportlet"); 063 // get current list of options 064 String refreshTextSelectLocator = "id=" + idPrefix + "RefreshTextField_control"; 065 String[] options1 = selenium.getSelectOptions(refreshTextSelectLocator); 066 String dropDownSelectLocator = "id=" + idPrefix + "DropDown_control"; 067 selenium.select(dropDownSelectLocator, "label=Vegetables"); 068 selenium.click("//option[@value='Vegetables']"); 069 Thread.sleep(3000); 070 //get list of options after change 071 String[] options2 = selenium.getSelectOptions(refreshTextSelectLocator); 072 //verify that the change has occurred 073 assertFalse(options1[options1.length - 1].equalsIgnoreCase(options2[options2.length - 1])); 074 //confirm that control gets disabled 075 selenium.select(dropDownSelectLocator, "label=None"); 076 Thread.sleep(3000); 077 assertEquals("true", selenium.getAttribute(refreshTextSelectLocator+ "@disabled")); 078 079 } 080 081 /** 082 * open the configuration test view page 083 */ 084 private void openConfigurationTestView() { 085 selenium.open("/kr-dev/portal.do"); 086 selenium.type("name=__login_user", "admin"); 087 selenium.click("css=input[type=\"submit\"]"); 088 selenium.waitForPageToLoad("30000"); 089 selenium.click("link=KRAD"); 090 selenium.waitForPageToLoad("30000"); 091 selenium.isElementPresent("link=Configuration Test View"); 092 selenium.click("link=Configuration Test View"); 093 selenium.waitForPageToLoad("30000"); 094 } 095 096 /** 097 * test adding a line to a collection which uses an add line that has spring expressions that are evaluated on refresh 098 * a specific time is set 099 */ 100 @Test 101 public void testAddLineWithSpecificTime() throws Exception{ 102 openConfigurationTestView(); 103 confirmAddLineControlsPresent(); 104 105 String startTimeId = "id=" +idPrefix + "StartTime" + addLineIdSuffix; 106 selenium.focus(startTimeId); 107 String inputTime = "7:06"; 108 selenium.type(startTimeId, inputTime); 109 110 String amPmSelectLocator = "id=" + idPrefix + "StartTimeAmPm" + addLineIdSuffix; 111 selenium.click(amPmSelectLocator); 112 selenium.select(amPmSelectLocator, "label=PM"); 113 assertEquals("PM", selenium.getSelectedLabel(amPmSelectLocator)); 114 115 Thread.sleep(5000); //allow for ajax refresh 116 selenium.click("css=div#ConfigurationTestView-ProgressiveRender-TimeInfoSection button"); 117 Thread.sleep(5000); //allow for line to be added 118 119 //confirm that line has been added 120 assertTrue("line is not present", selenium.isElementPresent("//input[@value='7:06']")); 121 } 122 123 /** 124 * test adding a line to a collection which has the property refreshWhenChangedPropertyNames 125 * set on more than one component. 126 */ 127 @Test 128 public void testAddLineWithAllDay() throws Exception{ 129 openConfigurationTestView(); 130 confirmAddLineControlsPresent(); 131 132 String startTimeId = "id=" +idPrefix + "StartTime" + addLineIdSuffix; 133 selenium.focus(startTimeId); 134 String inputTime = "5:20"; 135 selenium.type(startTimeId, inputTime); 136 137 String allDaySelector = "id=" + idPrefix + "AllDay" + addLineIdSuffix; 138 selenium.focus(allDaySelector); 139 Thread.sleep(5000); //allow for ajax refresh 140 selenium.click(allDaySelector); 141 142 String amPmSelectLocator = "id=" + idPrefix + "StartTimeAmPm" + addLineIdSuffix; 143 selenium.click(amPmSelectLocator); 144 selenium.select(amPmSelectLocator, "label=PM"); 145 assertEquals("PM", selenium.getSelectedLabel(amPmSelectLocator)); 146 147 Thread.sleep(5000); //allow for ajax refresh 148 selenium.click("css=div#ConfigurationTestView-ProgressiveRender-TimeInfoSection button"); 149 Thread.sleep(5000); //allow for line to be added 150 151 //confirm that line has been added 152 assertTrue("line is not present", selenium.isElementPresent("//input[@value='5:20']")); 153 } 154 155 /** 156 * verify that add line controls are present 157 */ 158 private void confirmAddLineControlsPresent() { 159 String[] addLineIds = {"StartTime", "StartTimeAmPm", "AllDay"}; 160 161 for (String id: addLineIds) { 162 String tagId = "id=" + idPrefix + id + addLineIdSuffix; 163 assertTrue("Did not find id " + tagId, selenium.isElementPresent(tagId)); 164 } 165 } 166 167 /** 168 * test adding a line to a collection which uses an add line that has spring expressions that are evaluated on refresh 169 * a specific time is set 170 */ 171 @Test 172 @Ignore("count rows through CSS or XPATH fails") 173 public void testAddLineAllDay() throws Exception{ 174 openConfigurationTestView(); 175 confirmAddLineControlsPresent(); 176 177 //store number of rows before adding the lines 178 String cssCountRows = "div#ConfigurationTestView-ProgressiveRender-TimeInfoSection.uif-group div#ConfigurationTestView-ProgressiveRender-TimeInfoSection_disclosureContent.uif-disclosureContent table tbody tr"; 179 int rowCount = (selenium.getCssCount(cssCountRows)).intValue(); 180 181 String allDayId = "id=" + idPrefix + "AllDay" + addLineIdSuffix; 182 selenium.focus(allDayId); 183 Thread.sleep(5000); //allow for ajax refresh 184 selenium.click(allDayId); 185 selenium.click("css=div#ConfigurationTestView-ProgressiveRender-TimeInfoSection button"); 186 Thread.sleep(5000); //allow for line to be added 187 188 //confirm that line has been added (by checking for the new delete button) 189 assertEquals("line was not added", rowCount + 1, (selenium.getCssCount(cssCountRows)).intValue()); 190 } 191 192 193 @After 194 public void tearDown() throws Exception { 195 selenium.stop(); 196 } 197 }