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.krad.configview;
018    
019    import edu.samplu.common.WebDriverLegacyITBase;
020    import org.junit.Assert;
021    import org.junit.Test;
022    import org.openqa.selenium.By;
023    
024    /**
025     * Selenium test that tests collections
026     *
027     * @author Kuali Rice Team (rice.collab@kuali.org)
028     */
029    public class CollectionsLegacyIT extends WebDriverLegacyITBase {
030            
031            
032        @Override
033        public String getTestUrl() {
034            return "/kr-krad/uicomponents?viewId=ConfigurationTestView-Collections&methodToCall=start";
035        }
036    
037        /**
038         * Test adding a column of values to the Default Tests Table Layout
039         */
040        @Test
041        public void testDefaultTestsTableLayout() throws Exception{
042            
043            assertTableLayout();        
044            waitAndTypeByName("newCollectionLines['list1'].field1", "asdf1");
045            waitAndTypeByName("newCollectionLines['list1'].field2", "asdf2");
046            waitAndTypeByName("newCollectionLines['list1'].field3", "asdf3");
047            waitAndTypeByName("newCollectionLines['list1'].field4", "asdf4");
048            waitAndClickByXpath("//button[contains(.,'add')]"); // the first button is the one we want
049                    
050            for (int second = 0;; second++) {
051                if (second >= 60) Assert.fail("timeout");
052                try { if ( getAttributeByName("newCollectionLines['list1'].field1","value").equals("")) break; } catch (Exception e) {}
053                Thread.sleep(1000);
054            }
055    
056            Assert.assertEquals("",getAttributeByName("newCollectionLines['list1'].field1","value"));
057            Assert.assertEquals("", getAttributeByName("newCollectionLines['list1'].field2","value"));
058            Assert.assertEquals("", getAttributeByName("newCollectionLines['list1'].field3","value"));
059            Assert.assertEquals("", getAttributeByName("newCollectionLines['list1'].field4","value"));
060            Assert.assertEquals("asdf1", getAttributeByName("list1[0].field1","value"));
061            Assert.assertEquals("asdf2", getAttributeByName("list1[0].field2","value"));
062            Assert.assertEquals("asdf3", getAttributeByName("list1[0].field3","value"));
063            Assert.assertEquals("asdf4", getAttributeByName("list1[0].field4","value"));
064            
065            Assert.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"));
066            passed();
067        }
068    
069        
070        private void assertTableLayout() {
071            Assert.assertTrue(driver.getPageSource().contains("Table Layout"));
072            Assert.assertTrue(driver.getPageSource().contains("Field 1"));
073            Assert.assertTrue(driver.getPageSource().contains("Field 2"));
074            Assert.assertTrue(driver.getPageSource().contains("Field 3"));
075            Assert.assertTrue(driver.getPageSource().contains("Field 4"));
076            Assert.assertTrue(driver.getPageSource().contains("Actions"));
077        }
078    
079        /**
080         * Test adding a column of values to the Add Blank Line Tests Table Layout
081         */
082        @Test
083        public void testAddBlankLine() throws Exception {
084            waitAndClickByLinkText("Add Blank Line");
085            waitAndClickByXpath("//button[contains(.,'Add Line')]");
086            Thread.sleep(3000); //  TODO a wait until the loading.gif isn't visible woudl be better
087            assertElementPresentByName("list1[0].field1");
088         
089            assertTableLayout();
090            Assert.assertEquals("", getAttributeByName("list1[0].field1","value"));
091            Assert.assertEquals("", getAttributeByName("list1[0].field2","value"));
092            Assert.assertEquals("", getAttributeByName("list1[0].field3","value"));
093            Assert.assertEquals("", getAttributeByName("list1[0].field4","value"));
094            Assert.assertEquals("5", getAttributeByName("list1[1].field1","value"));
095            Assert.assertEquals("6", getAttributeByName("list1[1].field2","value"));
096            Assert.assertEquals("7", getAttributeByName("list1[1].field3","value"));
097            Assert.assertEquals("8", getAttributeByName("list1[1].field4","value"));
098            
099            
100            Assert.assertEquals("Total: 419", driver.findElement(By.xpath("//fieldset/div/div[2]/div[2]")).getText());     
101            waitAndTypeByName("list1[0].field1", "1");
102            waitAndTypeByName("list1[0].field2", "1");
103            waitAndTypeByName("list1[0].field3", "1");
104            waitAndTypeByName("list1[0].field4", "1");
105            Assert.assertEquals("Total: 420", driver.findElement(By.xpath("//fieldset/div/div[2]/div[2]")).getText());   
106            passed();
107            
108        }
109    
110      
111        /**
112         * Test action column placement in table layout collections
113         */
114        @Test
115        public void testActionColumnPlacement() throws Exception {
116    
117            //Lack of proper locators its not possible to uniquely identify/locate this elements without use of ID's.
118            //This restricts us to use the XPath to locate elements from the dome. 
119            //This test is prone to throw error in case of any changes in the dom Html graph.
120            
121            
122            
123            waitAndClickByLinkText("Column Sequence");
124            Thread.sleep(2000);
125            //waitAndClick("css=div.jGrowl-close");
126            // check if actions column RIGHT by default
127            //Assert.assertTrue(isElementPresent("//div[@id='ConfigurationTestView-collection1']//tr[2]/td[6]//button[contains(.,\"delete\")]"));
128            for (int second = 0;; second++) {
129                if (second >= 60) Assert.fail("timeout");
130                try { if (isElementPresentByXpath("//tr[2]/td[6]/div/fieldset/div/div[2]/button")) break; } catch (Exception e) {}
131                Thread.sleep(1000);
132            }
133            Assert.assertTrue(isElementPresentByXpath("//tr[2]/td[6]/div/fieldset/div/div[2]/button"));
134    
135            // check if actions column is LEFT
136            //Assert.assertTrue(isElementPresent("//div[@id='ConfigurationTestView-collection2']//tr[2]/td[1]//button[contains(.,\"delete\")]"));
137            for (int second = 0;; second++) {
138                if (second >= 60) Assert.fail("timeout");
139                try { if (isElementPresentByXpath("//div[2]/div[2]/div[2]/table/tbody/tr[2]/td/div/fieldset/div/div[2]/button")) break; } catch (Exception e) {}
140                Thread.sleep(1000);
141            }
142            Assert.assertTrue(isElementPresentByXpath("//div[2]/div[2]/div[2]/table/tbody/tr[2]/td/div/fieldset/div/div[2]/button"));
143            
144            // check if actions column is 3rd in a sub collection
145            //Assert.assertTrue(isElementPresent("//div[@id='ConfigurationTestView-subCollection2_line0']//tr[2]/td[3]//button[contains(.,\"delete\")]"));
146            for (int second = 0;; second++) {
147                if (second >= 60) Assert.fail("timeout");
148                try { if (isElementPresentByXpath("//tr[2]/td[3]/div/fieldset/div/div[2]/button")) break; } catch (Exception e) {}
149                Thread.sleep(1000);
150            }
151            Assert.assertTrue(isElementPresentByXpath("//tr[2]/td[3]/div/fieldset/div/div[2]/button"));
152            passed();
153            
154        }
155        
156        
157        @Test
158            public void testAddViaLightbox() throws Exception {
159                    
160                    waitAndClickByLinkText("Add Via Lightbox");
161                    Assert.assertEquals("Total: 419", driver.findElement(By.xpath("//fieldset/div/div[2]/div[2]")).getText());
162                waitAndClickByXpath("//button[contains(.,'Add Line')]");
163            Thread.sleep(3000);
164            waitAndTypeByXpath("//form/div/table/tbody/tr/td/div/input", "1");
165            waitAndTypeByXpath("//form/div/table/tbody/tr[2]/td/div/input", "1");
166            waitAndTypeByXpath("//form/div/table/tbody/tr[3]/td/div/input", "1");
167            waitAndTypeByXpath("//form/div/table/tbody/tr[4]/td/div/input", "1");
168            waitAndClickByXpath("//button[@id='uif-addLine_add']");
169            Thread.sleep(3000);
170                    Assert.assertEquals("Total: 420", driver.findElement(By.xpath("//fieldset/div/div[2]/div[2]")).getText());
171            passed();
172            }
173            
174            @Test
175            public void testColumnSequence() throws Exception {
176                    
177                    waitAndClickByLinkText("Column Sequence");
178                    Thread.sleep(3000);
179                    waitAndTypeByName("newCollectionLines['list1'].field1", "1");
180                    waitAndTypeByName("newCollectionLines['list1'].field2", "1");
181                    waitAndTypeByName("newCollectionLines['list1'].field3", "1");
182                    waitAndTypeByName("newCollectionLines['list1'].field4", "1");
183                    waitAndClick(By.id("uif-addLine_add"));
184                    Thread.sleep(3000);
185                                    
186                    //Check if row has been added really or not
187                    Assert.assertEquals("", getAttributeByName("newCollectionLines['list1'].field1","value"));
188            Assert.assertEquals("", getAttributeByName("newCollectionLines['list1'].field2","value"));
189            Assert.assertEquals("", getAttributeByName("newCollectionLines['list1'].field3","value"));
190            Assert.assertEquals("", getAttributeByName("newCollectionLines['list1'].field4","value"));
191            Assert.assertEquals("1", getAttributeByName("list1[0].field1","value"));
192            Assert.assertEquals("1", getAttributeByName("list1[0].field2","value"));
193            Assert.assertEquals("1", getAttributeByName("list1[0].field3","value"));
194            Assert.assertEquals("1", getAttributeByName("list1[0].field4","value"));
195            
196            //Check for the added if delete is present or not
197                    Assert.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"));
198                    passed();
199            }
200    
201            @Test
202            public void testSequencerow() throws Exception {
203                    waitAndClickByLinkText("Save Row");
204                    Thread.sleep(3000);
205                    waitAndTypeByName("newCollectionLines['list1'].field1", "1");
206                    waitAndTypeByName("newCollectionLines['list1'].field2", "1");
207                    waitAndTypeByName("newCollectionLines['list1'].field3", "1");
208                    waitAndTypeByName("newCollectionLines['list1'].field4", "1");
209                                    
210                    waitAndClickByXpath("//button[contains(.,'add')]");
211                    Thread.sleep(3000);
212                    
213                    //Check if row has been added really or not
214                    Assert.assertEquals("", getAttributeByName("newCollectionLines['list1'].field1","value"));
215            Assert.assertEquals("", getAttributeByName("newCollectionLines['list1'].field2","value"));
216            Assert.assertEquals("", getAttributeByName("newCollectionLines['list1'].field3","value"));
217            Assert.assertEquals("", getAttributeByName("newCollectionLines['list1'].field4","value"));
218            Assert.assertEquals("1",getAttributeByName("list1[0].field1","value"));
219            Assert.assertEquals("1",getAttributeByName("list1[0].field2","value"));
220            Assert.assertEquals("1",getAttributeByName("list1[0].field3","value"));
221            Assert.assertEquals("1",getAttributeByName("list1[0].field4","value"));
222            
223            //Check for the added if delete is present or not
224                    Assert.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"));
225                    Assert.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']"));
226                    passed();
227            }
228    
229        
230    }