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