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