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