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 */
016 package edu.sampleu.krad.configview;
017
018 import org.junit.Test;
019 import org.kuali.rice.testtools.selenium.WebDriverLegacyITBase;
020 import org.openqa.selenium.By;
021
022 /**
023 * @author Kuali Rice Team (rice.collab@kuali.org)
024 */
025 public class CollectionsAft extends WebDriverLegacyITBase {
026
027 /**
028 * /kr-krad/uicomponents?viewId=ConfigurationTestView-Collections&methodToCall=start
029 */
030 public static final String BOOKMARK_URL = "/kr-krad/uicomponents?viewId=ConfigurationTestView-Collections&methodToCall=start";
031
032 /**
033 * (//a[contains(text(),'Collections Configuration Test View')])[2]
034 */
035 public static final String TEXT_COLLECTIONS_CONFIGURATION_TEST_VIEW_XPATH =
036 "(//a[contains(text(),'Collections Configuration Test View')])[1]";
037
038 /**
039 * Kuali :: Collection Test View
040 */
041 public static final String KUALI_COLLECTION_WINDOW_TITLE = "Kuali :: Collection Test View";
042
043 @Override
044 protected String getBookmarkUrl() {
045 return BOOKMARK_URL;
046 }
047
048 protected void navigate() throws Exception {
049 waitAndClickKRAD();
050 waitAndClickByXpath(TEXT_COLLECTIONS_CONFIGURATION_TEST_VIEW_XPATH);
051 switchToWindow(KUALI_COLLECTION_WINDOW_TITLE);
052 }
053
054 protected void testCollections() throws Exception {
055 testActionColumnPlacement();
056 testAddViaLightbox();
057 testColumnSequence();
058 testSequencerow();
059 passed();
060 }
061
062 @Test
063 public void testCollectionsBookmark() throws Exception {
064 testCollections();
065 }
066
067 @Test
068 public void testCollectionsNav() throws Exception {
069 testCollections();
070 }
071
072 @Test
073 public void testAddBlankLineBookmark() throws Exception {
074 testAddBlankLine();
075 passed();
076 }
077
078 @Test
079 public void testAddBlankLineNav() throws Exception {
080 testAddBlankLine();
081 passed();
082 }
083
084 @Test
085 public void testAddDeleteBookmark() throws Exception {
086 testAddRowOfText();
087 passed();
088 }
089
090 @Test
091 public void testAddDeleteNav() throws Exception {
092 testAddRowOfText();
093 passed();
094 }
095
096 @Test
097 public void testSumBookmark() throws Exception {
098 testSum();
099 passed();
100 }
101
102 @Test
103 public void testSumNav() throws Exception {
104 testSum();
105 passed();
106 }
107
108 protected void testAddRowOfText() throws Exception {
109 assertTableLayout();
110 waitAndTypeByName("newCollectionLines['list1'].field1", "asdf1");
111 waitAndTypeByName("newCollectionLines['list1'].field2", "asdf2");
112 waitAndTypeByName("newCollectionLines['list1'].field3", "asdf3");
113 waitAndTypeByName("newCollectionLines['list1'].field4", "asdf4");
114 waitAndClickByXpath("//button[contains(.,'add')]"); // the first button is the one we want
115
116 for (int second = 0;; second++) {
117 if (second >= waitSeconds)
118 jiraAwareFail(TIMEOUT_MESSAGE);
119 try {
120 if (waitAndGetAttributeByName("newCollectionLines['list1'].field1", "value").equals(""))
121 break;
122 } catch (Exception e) {}
123 Thread.sleep(1000);
124 }
125
126 assertEquals("", waitAndGetAttributeByName("newCollectionLines['list1'].field1", "value"));
127 assertEquals("", waitAndGetAttributeByName("newCollectionLines['list1'].field2", "value"));
128 assertEquals("", waitAndGetAttributeByName("newCollectionLines['list1'].field3", "value"));
129 assertEquals("", waitAndGetAttributeByName("newCollectionLines['list1'].field4", "value"));
130 assertEquals("asdf1", waitAndGetAttributeByName("list1[0].field1", "value"));
131 assertEquals("asdf2", waitAndGetAttributeByName("list1[0].field2", "value"));
132 assertEquals("asdf3", waitAndGetAttributeByName("list1[0].field3", "value"));
133 assertEquals("asdf4", waitAndGetAttributeByName("list1[0].field4", "value"));
134 }
135
136 /**
137 * Test adding a column of values to the Add Blank Line Tests Table Layout
138 */
139 protected void testAddBlankLine() throws Exception {
140 waitAndClickByLinkText("Add Blank Line");
141 waitAndClickById("Collections-AddBlankLine-TableTop_del_line0"); // the line withe asdf1, etc.
142 Thread.sleep(3000); // TODO a wait until the loading.gif isn't visible would be better
143 waitAndClickByXpath("//button[contains(.,'Add Line')]");
144 Thread.sleep(3000); // TODO a wait until the loading.gif isn't visible would be better
145 assertElementPresentByName("list1[0].field1");
146 assertTableLayout();
147 assertEquals("", waitAndGetAttributeByName("list1[0].field1", "value"));
148 assertEquals("", waitAndGetAttributeByName("list1[0].field2", "value"));
149 assertEquals("", waitAndGetAttributeByName("list1[0].field3", "value"));
150 assertEquals("", waitAndGetAttributeByName("list1[0].field4", "value"));
151 }
152
153 private void testSum() throws InterruptedException {
154 assertEquals("5", waitAndGetAttributeByName("list1[0].field1", "value"));
155 assertEquals("6", waitAndGetAttributeByName("list1[0].field2", "value"));
156 assertEquals("7", waitAndGetAttributeByName("list1[0].field3", "value"));
157 assertEquals("8", waitAndGetAttributeByName("list1[0].field4", "value"));
158 Integer preValue= Integer.parseInt(driver.findElement(By.xpath("//fieldset/div/div[2]/p")).getText());
159 waitAndTypeByName("list1[0].field1", "1");
160 waitAndTypeByName("list1[0].field2", "1");
161 waitAndTypeByName("list1[0].field3", "1");
162 waitAndTypeByName("list1[0].field4", "1");
163 Integer postValue= Integer.parseInt(driver.findElement(By.xpath("//fieldset/div/div[2]/p")).getText());
164 if(preValue>postValue) {
165 jiraAwareFail("Totalling not working in " + getClass().toString());
166 }
167 }
168
169 /**
170 * Test action column placement in table layout collections
171 */
172 protected void testActionColumnPlacement() throws Exception {
173 //Lack of proper locators its not possible to uniquely identify/locate this elements without use of ID's.
174 //This restricts us to use the XPath to locate elements from the dome.
175 //This test is prone to throw error in case of any changes in the dom Html graph.
176 waitAndClickByLinkText("Column Sequence");
177 Thread.sleep(2000);
178
179 //jiraAwareWaitAndClick("css=div.jGrowl-close");
180 // check if actions column RIGHT by default
181 //assertTrue(isElementPresent("//div[@id='ConfigurationTestView-collection1']//tr[2]/td[6]//button[contains(.,\"delete\")]"));
182 for (int second = 0;; second++) {
183 if (second >= waitSeconds)
184 jiraAwareFail(TIMEOUT_MESSAGE);
185 try {
186 if (isElementPresentByXpath("//tr[2]/td[6]/div/fieldset/div/button"))
187 break;
188 } catch (Exception e) {}
189 Thread.sleep(1000);
190 }
191 assertTrue(getClass().toString(), isElementPresentByXpath("//tr[2]/td[6]/div/fieldset/div/button"));
192
193 // check if actions column is LEFT
194 //assertTrue(isElementPresent("//div[@id='ConfigurationTestView-collection2']//tr[2]/td[1]//button[contains(.,\"delete\")]"));
195 for (int second = 0;; second++) {
196 if (second >= waitSeconds)
197 jiraAwareFail(TIMEOUT_MESSAGE);
198 try {
199 if (isElementPresentByXpath("//tr/td/div/fieldset/div/button[@id='Collections-ColumnSequence-TableLeft_add']"))
200 break;
201 } catch (Exception e) {}
202 Thread.sleep(1000);
203 }
204 assertTrue(getClass().toString(), isElementPresentByXpath("//tr/td/div/fieldset/div/button[@id='Collections-ColumnSequence-TableLeft_add']"));
205
206 // check if actions column is 3rd in a sub collection
207 //assertTrue(isElementPresent("//div[@id='ConfigurationTestView-subCollection2_line0']//tr[2]/td[3]//button[contains(.,\"delete\")]"));
208 for (int second = 0;; second++) {
209 if (second >= waitSeconds)
210 jiraAwareFail(TIMEOUT_MESSAGE);
211 try {
212 if (isElementPresentByXpath("//tr[2]/td[3]/div/fieldset/div/button"))
213 break;
214 } catch (Exception e) {}
215 Thread.sleep(1000);
216 }
217 assertTrue(getClass().toString(), isElementPresentByXpath("//tr[2]/td[3]/div/fieldset/div/button"));
218 }
219
220 protected void testAddViaLightbox() throws Exception {
221 waitAndClickByLinkText("Add Via Lightbox");
222 Integer preValue= Integer.parseInt(driver.findElement(By.xpath("//fieldset/div/div[2]/p")).getText());
223 waitAndClickButtonByText("Add Line");
224 Thread.sleep(3000);
225 waitAndTypeByXpath("//form/section/table/tbody/tr/td/div/input", "1");
226 waitAndTypeByXpath("//form/section/table/tbody/tr[2]/td/div/input", "1");
227 waitAndTypeByXpath("//form/section/table/tbody/tr[3]/td/div/input", "1");
228 waitAndTypeByXpath("//form/section/table/tbody/tr[4]/td/div/input", "1");
229 waitAndClickByXpath("//button[@id='Collections-AddViaLightbox-TableTop_add']");
230 Thread.sleep(3000);
231 Integer postValue= Integer.parseInt(driver.findElement(By.xpath("//fieldset/div/div[2]/p")).getText());
232 if(preValue>postValue) {
233 jiraAwareFail("Totalling not working in " + getClass().toString());
234 }
235 }
236
237 protected void testColumnSequence() throws Exception {
238 waitAndClickByLinkText("Column Sequence");
239 acceptAlertIfPresent();
240 Thread.sleep(3000);
241 waitAndTypeByName("newCollectionLines['list1'].field1", "1");
242 waitAndTypeByName("newCollectionLines['list1'].field2", "1");
243 waitAndTypeByName("newCollectionLines['list1'].field3", "1");
244 waitAndTypeByName("newCollectionLines['list1'].field4", "1");
245 waitAndClick(By.id("Collections-ColumnSequence-TableDefault_add"));
246 Thread.sleep(3000);
247
248 //Check if row has been added really or not
249 testIfRowHasBeenAdded();
250
251 //Check for the added if delete is present or not
252 assertTrue(getClass().toString(), isElementPresentByXpath("//div[@id='Collections-ColumnSequence-TableDefault_disclosureContent']/div[@class='dataTables_wrapper']/table/tbody/tr[2]/td[6]/div/fieldset/div/button"));
253 }
254
255 protected void testSequencerow() throws Exception {
256 waitAndClickByLinkText("Save Row");
257 acceptAlertIfPresent();
258 Thread.sleep(3000);
259 waitAndTypeByName("newCollectionLines['list1'].field1", "1");
260 waitAndTypeByName("newCollectionLines['list1'].field2", "1");
261 waitAndTypeByName("newCollectionLines['list1'].field3", "1");
262 waitAndTypeByName("newCollectionLines['list1'].field4", "1");
263 waitAndClickByXpath("//button[contains(.,'add')]");
264 Thread.sleep(3000);
265
266 //Check if row has been added really or not
267 testIfRowHasBeenAdded();
268
269 //Check for the added if delete is present or not
270 assertTrue(getClass().toString(), isElementPresentByXpath("//div[@id='Collections-SaveRow-Table_disclosureContent']/div[@class='dataTables_wrapper']/table/tbody/tr[2]/td[6]/div/fieldset/div/button"));
271 // assertTrue(isElementPresentByXpath("//div[@id='Collections-SaveRow-Table_disclosureContent']/div[@class='dataTables_wrapper']/table/tbody/tr[2]/td[6]/div/fieldset/div/div[@class='uif-boxLayout uif-horizontalBoxLayout clearfix']/button[@class='uif-action uif-secondaryActionButton uif-smallActionButton uif-saveLineAction']"));
272 }
273
274 protected void testIfRowHasBeenAdded() throws Exception {
275 //Check if row has been added really or not
276 assertEquals("", waitAndGetAttributeByName("newCollectionLines['list1'].field1", "value"));
277 assertEquals("", waitAndGetAttributeByName("newCollectionLines['list1'].field2", "value"));
278 assertEquals("", waitAndGetAttributeByName("newCollectionLines['list1'].field3", "value"));
279 assertEquals("", waitAndGetAttributeByName("newCollectionLines['list1'].field4", "value"));
280 assertEquals("1", waitAndGetAttributeByName("list1[0].field1", "value"));
281 assertEquals("1", waitAndGetAttributeByName("list1[0].field2", "value"));
282 assertEquals("1", waitAndGetAttributeByName("list1[0].field3", "value"));
283 assertEquals("1", waitAndGetAttributeByName("list1[0].field4", "value"));
284 }
285 }