001    /*
002     * Copyright 2005-2013 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    package edu.samplu.krad.compview;
017    
018    import com.thoughtworks.selenium.SeleneseTestBase;
019    import edu.samplu.common.SmokeTestBase;
020    import org.junit.Test;
021    
022    import java.util.Arrays;
023    import java.util.Collections;
024    
025    /**
026     * @author Kuali Rice Team (rice.collab@kuali.org)
027     */
028    public class BreadcrumbSmokeTest extends SmokeTestBase {
029    
030        /**
031         * /kr-krad/uicomponents?viewId=UifCompView&methodToCall=start&pageId=UifCompView-Page3
032         */
033        public static final String BOOKMARK_URL = "/kr-krad/uicomponents?viewId=UifCompView&methodToCall=start&pageId=UifCompView-Page1";
034    
035        /**
036         * //div[@class='uif-breadcrumbSiblingContent']//div[@class='uif-inputField']//ul[@class='uif-optionList']
037         */
038        public static final String SECOND_BREADCRUMB_NAV_XPATH = "//div[@class='uif-breadcrumbSiblingContent']//div[@class='uif-inputField']//ul[@class='uif-optionList']";
039    
040        /**
041         * (//a[@class='uif-breadcrumbSiblingLink'])[2]
042         * Not final as it needs to be overwritten for the Demo Breadcrumbs smoke test
043         */
044        public static final String SECOND_DOWN_TRIANGLE_XPATH = "(//a[@class='uif-breadcrumbSiblingLink'])[2]";
045    
046        String[][] selectAsserts = {{"UifCompView", "Uif Components"}};
047    
048        int[] breadcrumbOrderIndexes = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1};
049    
050        @Override
051        protected String getBookmarkUrl() {
052            return BOOKMARK_URL;
053        }
054    
055        protected String getTriangleXpath() {
056            return SECOND_DOWN_TRIANGLE_XPATH;
057        }
058    
059        protected void navigate() throws Exception {
060            waitAndClickKRAD();
061            waitAndClickByXpath(KITCHEN_SINK_XPATH);
062            switchToWindow(KUALI_UIF_COMPONENTS_WINDOW_XPATH);
063        }
064    
065        protected void testBreadcrumb(int pageNumber) throws Exception {
066            // <ul id="u13_control" class="uif-optionList" data-control_for="u13" tabindex="0"><li class="uif-optionList-item uif-optionList-selectedItem"><a href="http://env1.rice.kuali.org/kr-krad/uicomponents?methodToCall=start&pageId=UifCompView-Page1&viewId=UifCompView" data-key="UifCompView-Page1">
067            //         Input Fields and Controls
068            // </a></li>
069            // <li class="uif-optionList-item"><a href="http://env1.rice.kuali.org/kr-krad/uicomponents?methodToCall=start&pageId=UifCompView-Page2&viewId=UifCompView" data-key="UifCompView-Page2">
070            //         Other Fields
071            // </a></li>
072            // etc.
073            SeleneseTestBase.assertFalse(isVisibleByXpath(SECOND_BREADCRUMB_NAV_XPATH));
074            // The second ▼
075            waitAndClickByXpath(getTriangleXpath());
076            Thread.sleep(100);
077            SeleneseTestBase.assertTrue(isVisibleByXpath(SECOND_BREADCRUMB_NAV_XPATH));
078            waitAndClickByXpath(getTriangleXpath());
079            SeleneseTestBase.assertFalse(isVisibleByXpath(SECOND_BREADCRUMB_NAV_XPATH));
080            waitAndClickByXpath(getTriangleXpath());
081    
082            // The Second selection of the second ▼
083            // you can't just click by link text as the same clickable text is on the left navigation.
084            waitAndClickByXpath(SECOND_BREADCRUMB_NAV_XPATH +"/li[" + pageNumber + "]/a");
085            waitForElementPresentById("TopLink" + pageNumber); // bottom jump to top link
086            driver.getCurrentUrl().contains("pageId=UifCompView-Page" + pageNumber);
087        }
088    
089        protected void testBreadcrumbs() throws Exception {
090            for (int i = 0, s = breadcrumbOrderIndexes.length; i < s; i++) {
091                testBreadcrumb(breadcrumbOrderIndexes[i]);
092            }
093        }
094    
095        protected void testBreadcrumbsShuffled() throws Exception {
096            int[] copiedBreadcrumbOrderIndex = Arrays.copyOf(breadcrumbOrderIndexes, breadcrumbOrderIndexes.length);
097    
098            Collections.shuffle(Arrays.asList(copiedBreadcrumbOrderIndex));
099            for (int i = 0, s = copiedBreadcrumbOrderIndex.length; i < s; i++) {
100                testBreadcrumb(copiedBreadcrumbOrderIndex[i]);
101            }
102        }
103    
104        @Test
105        public void testBreadcrumbBookmark() throws Exception {
106            testBreadcrumbs();
107            passed();
108        }
109    
110        @Test
111        public void testBreadcrumbShuffledBookmark() throws Exception {
112            testBreadcrumbsShuffled();
113            passed();
114        }
115    
116        @Test
117        public void testBreadcrumbNav() throws Exception {
118            testBreadcrumbs();
119            passed();
120        }
121    
122        @Test
123        public void testBreadcrumbShuffledNav() throws Exception {
124            testBreadcrumbsShuffled();
125            passed();
126        }
127    }