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.ITUtil;
020    import edu.samplu.common.UpgradedSeleniumITBase;
021    import org.junit.Assert;
022    import org.junit.Test;
023    
024    /**
025     * Selenium test that tests collections
026     *
027     * @author Kuali Rice Team (rice.collab@kuali.org)
028     */
029    public class CollectionsIT extends UpgradedSeleniumITBase {
030    
031        @Override
032        public String getTestUrl() {
033            return "/kr-krad/uicomponents?viewId=ConfigurationTestView-Collections&methodToCall=start";
034        }
035    
036        /**
037         * Test adding a column of values to the Default Tests Table Layout
038         */
039        @Test
040        public void testDefaultTestsTableLayout() throws Exception{
041            //Thread.sleep(30000);
042            Assert.assertTrue(isTextPresent("Default Tests"));
043            assertTableLayout();
044    
045            waitAndType("name=newCollectionLines['list1'].field1", "asdf1");
046            waitAndType("name=newCollectionLines['list1'].field2", "asdf2");
047            waitAndType("name=newCollectionLines['list1'].field3", "asdf3");
048            waitAndType("name=newCollectionLines['list1'].field4", "asdf4");
049            waitAndClick("//button[contains(.,'add')]"); // the first button is the one we want
050    
051            for (int second = 0;; second++) {
052                if (second >= 60) Assert.fail("timeout");
053                try { if (getValue("name=newCollectionLines['list1'].field1").equals("")) break; } catch (Exception e) {}
054                Thread.sleep(1000);
055            }
056    
057            Assert.assertEquals("", getValue("name=newCollectionLines['list1'].field1"));
058            Assert.assertEquals("", getValue("name=newCollectionLines['list1'].field2"));
059            Assert.assertEquals("", getValue("name=newCollectionLines['list1'].field3"));
060            Assert.assertEquals("", getValue("name=newCollectionLines['list1'].field4"));
061            Assert.assertEquals("asdf1", getValue("name=list1[0].field1"));
062            Assert.assertEquals("asdf2", getValue("name=list1[0].field2"));
063            Assert.assertEquals("asdf3", getValue("name=list1[0].field3"));
064            Assert.assertEquals("asdf4", getValue("name=list1[0].field4"));
065            // TODO how to figure out which delete button for the one we just added?
066        }
067    
068        private void assertTableLayout() {
069            Assert.assertTrue(isTextPresent("Table Layout"));
070            Assert.assertTrue(isTextPresent("* Field 1"));
071            Assert.assertTrue(isTextPresent("* Field 2"));
072            Assert.assertTrue(isTextPresent("* Field 3"));
073            Assert.assertTrue(isTextPresent("* Field 4"));
074            Assert.assertTrue(isTextPresent("Actions"));
075        }
076    
077        /**
078         * Test adding a column of values to the Add Blank Line Tests Table Layout
079         */
080        @Test
081        public void testAddBlankLine() throws Exception {
082            waitAndClick("link=Add Blank Line");
083            waitAndClick("//button[contains(.,'Add Line')]");
084    
085            waitForElementPresent("name=list1[0].field1");
086            assertTableLayout();
087            Assert.assertEquals("", getValue("name=list1[0].field1"));
088            Assert.assertEquals("", getValue("name=list1[0].field2"));
089            Assert.assertEquals("", getValue("name=list1[0].field3"));
090            Assert.assertEquals("", getValue("name=list1[0].field4"));
091            Assert.assertEquals("5", getValue("name=list1[1].field1"));
092            Assert.assertEquals("6", getValue("name=list1[1].field2"));
093            Assert.assertEquals("7", getValue("name=list1[1].field3"));
094            Assert.assertEquals("8", getValue("name=list1[1].field4"));
095            // TODO type in new numbers into list1[0] fields and check that sums are updated and correct
096        }
097    
098        // TODO similar tests for other Collection Tabs
099    
100        /**
101         * Test action column placement in table layout collections
102         */
103        @Test
104        public void testActionColumnPlacement() throws Exception {
105    
106            //Lack of proper locators its not possible to uniquely identify/locate this elements without use of ID's.
107            //This restricts us to use the XPath to locate elements from the dome. 
108            //This test is prone to throw error in case of any changes in the dom Html graph.
109            
110            
111            
112            waitAndClick("link=Column Sequence");
113            Thread.sleep(2000);
114            //waitAndClick("css=div.jGrowl-close");
115            // check if actions column RIGHT by default
116            //Assert.assertTrue(isElementPresent("//div[@id='ConfigurationTestView-collection1']//tr[2]/td[6]//button[contains(.,\"delete\")]"));
117            for (int second = 0;; second++) {
118                if (second >= 60) Assert.fail("timeout");
119                try { if (isElementPresent("//tr[2]/td[6]/div/fieldset/div/div[2]/button")) break; } catch (Exception e) {}
120                Thread.sleep(1000);
121            }
122            Assert.assertTrue(isElementPresent("//tr[2]/td[6]/div/fieldset/div/div[2]/button"));
123    
124            // check if actions column is LEFT
125            //Assert.assertTrue(isElementPresent("//div[@id='ConfigurationTestView-collection2']//tr[2]/td[1]//button[contains(.,\"delete\")]"));
126            for (int second = 0;; second++) {
127                if (second >= 60) Assert.fail("timeout");
128                try { if (isElementPresent("//div[2]/div[2]/div[2]/table/tbody/tr[2]/td/div/fieldset/div/div[2]/button")) break; } catch (Exception e) {}
129                Thread.sleep(1000);
130            }
131            Assert.assertTrue(isElementPresent("//div[2]/div[2]/div[2]/table/tbody/tr[2]/td/div/fieldset/div/div[2]/button"));
132            
133            // check if actions column is 3rd in a sub collection
134            //Assert.assertTrue(isElementPresent("//div[@id='ConfigurationTestView-subCollection2_line0']//tr[2]/td[3]//button[contains(.,\"delete\")]"));
135            for (int second = 0;; second++) {
136                if (second >= 60) Assert.fail("timeout");
137                try { if (isElementPresent("//tr[2]/td[3]/div/fieldset/div/div[2]/button")) break; } catch (Exception e) {}
138                Thread.sleep(1000);
139            }
140            Assert.assertTrue(isElementPresent("//tr[2]/td[3]/div/fieldset/div/div[2]/button"));
141    
142            
143        }
144    }