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