View Javadoc
1   /**
2    * Copyright 2005-2016 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package edu.sampleu.krad.configview;
17  
18  import org.junit.Test;
19  import org.kuali.rice.testtools.selenium.WebDriverLegacyITBase;
20  import org.openqa.selenium.By;
21  
22  /**
23   * @author Kuali Rice Team (rice.collab@kuali.org)
24   */
25  public class CollectionsAft extends WebDriverLegacyITBase {
26  
27      /**
28       * /kr-krad/uicomponents?viewId=ConfigurationTestView-Collections&methodToCall=start
29       */
30      public static final String BOOKMARK_URL = "/kr-krad/uicomponents?viewId=ConfigurationTestView-Collections&methodToCall=start";
31  
32      /**
33       * (//a[contains(text(),'Collections Configuration Test View')])[2]
34       */
35      public static final String TEXT_COLLECTIONS_CONFIGURATION_TEST_VIEW_XPATH =
36              "(//a[contains(text(),'Collections Configuration Test View')])[1]";
37  
38      /**
39       * Kuali :: Collection Test View
40       */
41      public static final String KUALI_COLLECTION_WINDOW_TITLE = "Kuali :: Collection Test View";
42  
43      @Override
44      protected String getBookmarkUrl() {
45          return BOOKMARK_URL;
46      }
47  
48      protected void navigate() throws Exception {
49          waitAndClickKRAD();
50          jGrowl("Click Collections Configuration Test View link");
51          waitAndClickByXpath(TEXT_COLLECTIONS_CONFIGURATION_TEST_VIEW_XPATH);
52          switchToWindow(KUALI_COLLECTION_WINDOW_TITLE);
53      }
54  
55      protected void testCollections() throws Exception {
56          testActionColumnPlacement();
57          testAddViaLightbox();
58          testColumnSequence();
59          testSequencerow();
60          passed();
61      }
62  
63      @Test
64      public void testCollectionsBookmark() throws Exception {
65          testCollections();
66      }
67  
68      @Test
69      public void testCollectionsNav() throws Exception {
70          testCollections();
71      }
72  
73      @Test
74      public void testAddBlankLineBookmark() throws Exception {
75          testAddBlankLine();
76          passed();
77      }
78  
79      @Test
80      public void testAddBlankLineNav() throws Exception {
81          testAddBlankLine();
82          passed();
83      }
84  
85      @Test
86      public void testAddDeleteBookmark() throws Exception {
87          testAddRowOfText();
88          passed();
89      }
90  
91      @Test
92      public void testAddDeleteNav() throws Exception {
93          testAddRowOfText();
94          passed();
95      }
96  
97      @Test
98      public void testSumBookmark() throws Exception {
99          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 }