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        jGrowl("Click Collections Configuration Test View link");
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 testAddBlankLineBookmark() throws Exception {
075        testAddBlankLine();
076        passed();
077    }
078
079    @Test
080    public void testAddBlankLineNav() throws Exception {
081        testAddBlankLine();
082        passed();
083    }
084
085    @Test
086    public void testAddDeleteBookmark() throws Exception {
087        testAddRowOfText();
088        passed();
089    }
090
091    @Test
092    public void testAddDeleteNav() throws Exception {
093        testAddRowOfText();
094        passed();
095    }
096
097    @Test
098    public void testSumBookmark() throws Exception {
099        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        waitAndClickById("Collections-AddBlankLine-TableTop_del_line0"); // the line withe asdf1, etc.
143        Thread.sleep(3000); //  TODO a wait until the loading.gif isn't visible would be better
144        waitAndClickByXpath("//button[contains(.,'Add Line')]");
145        Thread.sleep(3000); //  TODO a wait until the loading.gif isn't visible would be better
146        waitForElementPresentByName("list1[0].field1");
147        assertTableLayout();
148        assertEquals("", waitAndGetAttributeByName("list1[0].field1", "value"));
149        assertEquals("", waitAndGetAttributeByName("list1[0].field2", "value"));
150        assertEquals("", waitAndGetAttributeByName("list1[0].field3", "value"));
151        assertEquals("", waitAndGetAttributeByName("list1[0].field4", "value"));
152    }
153
154    private void testSum() throws InterruptedException {
155        assertEquals("5", waitAndGetAttributeByName("list1[0].field1", "value"));
156        assertEquals("6", waitAndGetAttributeByName("list1[0].field2", "value"));
157        assertEquals("7", waitAndGetAttributeByName("list1[0].field3", "value"));
158        assertEquals("8", waitAndGetAttributeByName("list1[0].field4", "value"));
159        Integer preValue= Integer.parseInt(driver.findElement(By.xpath("//fieldset/div/div[2]/p")).getText());
160        waitAndTypeByName("list1[0].field1", "1");
161        waitAndTypeByName("list1[0].field2", "1");
162        waitAndTypeByName("list1[0].field3", "1");
163        waitAndTypeByName("list1[0].field4", "1");
164        Integer postValue= Integer.parseInt(driver.findElement(By.xpath("//fieldset/div/div[2]/p")).getText());
165        if(preValue>postValue) {
166            jiraAwareFail("Totalling not working in " + getClass().toString());
167        }
168    }
169
170    /**
171     * Test action column placement in table layout collections
172     */
173    protected void testActionColumnPlacement() throws Exception {
174        //Lack of proper locators its not possible to uniquely identify/locate this elements without use of ID's.
175        //This restricts us to use the XPath to locate elements from the dome.
176        //This test is prone to throw error in case of any changes in the dom Html graph.
177        waitAndClickByLinkText("Column Sequence");
178        Thread.sleep(2000);
179
180        //jiraAwareWaitAndClick("css=div.jGrowl-close");
181        // check if actions column RIGHT by default
182        //assertTrue(isElementPresent("//div[@id='ConfigurationTestView-collection1']//tr[2]/td[6]//button[contains(.,\"delete\")]"));
183        for (int second = 0;; second++) {
184            if (second >= waitSeconds)
185                jiraAwareFail(TIMEOUT_MESSAGE);
186            try {
187                if (isElementPresentByXpath("//tr[2]/td[6]/div/fieldset/div/button"))
188                    break;
189            } catch (Exception e) {}
190            Thread.sleep(1000);
191        }
192        assertTrue(getClass().toString(), isElementPresentByXpath("//tr[2]/td[6]/div/fieldset/div/button"));
193
194        // check if actions column is LEFT
195        //assertTrue(isElementPresent("//div[@id='ConfigurationTestView-collection2']//tr[2]/td[1]//button[contains(.,\"delete\")]"));
196        for (int second = 0;; second++) {
197            if (second >= waitSeconds)
198                jiraAwareFail(TIMEOUT_MESSAGE);
199            try {
200                if (isElementPresentByXpath("//tr/td/div/fieldset/div/button[@id='Collections-ColumnSequence-TableLeft_add']"))
201                    break;
202            } catch (Exception e) {}
203            Thread.sleep(1000);
204        }
205        assertTrue(getClass().toString(), isElementPresentByXpath("//tr/td/div/fieldset/div/button[@id='Collections-ColumnSequence-TableLeft_add']"));
206
207        // check if actions column is 3rd in a sub collection
208        //assertTrue(isElementPresent("//div[@id='ConfigurationTestView-subCollection2_line0']//tr[2]/td[3]//button[contains(.,\"delete\")]"));
209        for (int second = 0;; second++) {
210            if (second >= waitSeconds)
211                jiraAwareFail(TIMEOUT_MESSAGE);
212            try {
213                if (isElementPresentByXpath("//tr[2]/td[3]/div/fieldset/div/button"))
214                    break;
215            } catch (Exception e) {}
216            Thread.sleep(1000);
217        }
218        assertTrue(getClass().toString(), isElementPresentByXpath("//tr[2]/td[3]/div/fieldset/div/button"));
219    }
220
221    protected void testAddViaLightbox() throws Exception {
222        waitAndClickByLinkText("Add Via Lightbox");
223        Integer preValue= Integer.parseInt(driver.findElement(By.xpath("//fieldset/div/div[2]/p")).getText());
224        waitAndClickButtonByText("Add Line");
225        Thread.sleep(3000);
226        waitAndTypeByXpath("//div[@class='modal-body']/div[2]/div/input", "1");
227        waitAndTypeByXpath("//div[@class='modal-body']/div[4]/div/input", "1");
228        waitAndTypeByXpath("//div[@class='modal-body']/div[6]/div/input", "1");
229        waitAndTypeByXpath("//div[@class='modal-body']/div[8]/div/input", "1");
230        waitAndClickByXpath("//button[@id='Collections-AddViaLightbox-TableTop_add']");
231        Thread.sleep(3000);
232        Integer postValue= Integer.parseInt(driver.findElement(By.xpath("//fieldset/div/div[2]/p")).getText());
233        if(preValue>postValue) {
234            jiraAwareFail("Totalling not working in " + getClass().toString());
235        }
236    }
237
238    protected void testColumnSequence() throws Exception {
239        waitAndClickByLinkText("Column Sequence");
240        acceptAlert();
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        waitAndClick(By.id("Collections-ColumnSequence-TableDefault_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        assertTrue(getClass().toString(), isElementPresentByXpath("//div[@id='Collections-ColumnSequence-TableDefault_disclosureContent']/div[@class='dataTables_wrapper']/table/tbody/tr[2]/td[6]/div/fieldset/div/button"));
254    }
255
256    protected void testSequencerow() throws Exception {
257        waitAndClickByLinkText("Save Row");
258        acceptAlert();
259        Thread.sleep(3000);
260        waitAndTypeByName("newCollectionLines['list1'].field1", "1");
261        waitAndTypeByName("newCollectionLines['list1'].field2", "1");
262        waitAndTypeByName("newCollectionLines['list1'].field3", "1");
263        waitAndTypeByName("newCollectionLines['list1'].field4", "1");
264        clickAdd();
265        Thread.sleep(3000);
266
267        //Check if row has been added really or not
268        testIfRowHasBeenAdded();
269
270        //Check for the added if delete is present or not
271        assertTrue(getClass().toString(), isElementPresentByXpath("//div[@id='Collections-SaveRow-Table_disclosureContent']/div[@class='dataTables_wrapper']/table/tbody/tr[2]/td[6]/div/fieldset/div/button"));
272        //        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']"));
273    }
274
275    private void clickAdd() throws InterruptedException {
276        jGrowl("Click Add");
277        waitAndClickByXpath("//button[contains(.,'Add')]");
278    }
279
280    protected void testIfRowHasBeenAdded() throws Exception {
281        //Check if row has been added really or not
282        assertEquals("", waitAndGetAttributeByName("newCollectionLines['list1'].field1", "value"));
283        assertEquals("", waitAndGetAttributeByName("newCollectionLines['list1'].field2", "value"));
284        assertEquals("", waitAndGetAttributeByName("newCollectionLines['list1'].field3", "value"));
285        assertEquals("", waitAndGetAttributeByName("newCollectionLines['list1'].field4", "value"));
286        assertEquals("1", waitAndGetAttributeByName("list1[0].field1", "value"));
287        assertEquals("1", waitAndGetAttributeByName("list1[0].field2", "value"));
288        assertEquals("1", waitAndGetAttributeByName("list1[0].field3", "value"));
289        assertEquals("1", waitAndGetAttributeByName("list1[0].field4", "value"));
290    }
291}