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.admin.test;
018    
019    import edu.samplu.common.ITUtil;
020    import edu.samplu.common.WebDriverITBase;
021    import edu.samplu.common.WebDriverUtil;
022    import org.openqa.selenium.By;
023    import org.openqa.selenium.NoSuchElementException;
024    import org.openqa.selenium.WebElement;
025    
026    import java.net.URLEncoder;
027    import java.util.HashMap;
028    import java.util.Map;
029    import java.util.concurrent.TimeUnit;
030    
031    import static com.thoughtworks.selenium.SeleneseTestBase.assertTrue;
032    import static com.thoughtworks.selenium.SeleneseTestBase.fail;
033    import static com.thoughtworks.selenium.SeleneseTestCase.assertEquals;
034    
035    /**
036     * Tests docsearch url parameters
037     * @author Kuali Rice Team (rice.collab@kuali.org)
038     */
039    public class DocumentSearchURLParametersITBase extends WebDriverITBase {
040    
041        @Override
042        public String getTestUrl() {
043            return ITUtil.PORTAL;
044        }
045    
046        private static final String DOCUMENT_TYPE_NAME = "KualiNotification";
047        private static final String ADVANCED_SEARCH_ONLY_FIELD = "applicationDocumentId";
048    
049        protected static final Map<String, String> CORE_FIELDS = new HashMap<String, String>();
050        static {
051            // basic
052            CORE_FIELDS.put("documentTypeName", DOCUMENT_TYPE_NAME);
053            CORE_FIELDS.put("documentId", "1234");
054            CORE_FIELDS.put("initiatorPrincipalName", "CURRENT_USER");
055            CORE_FIELDS.put("dateCreated", "11/11/11");
056    
057        }
058        protected static final Map<String, String> BASIC_FIELDS = new HashMap<String, String>();
059        static {
060            BASIC_FIELDS.putAll(CORE_FIELDS);
061            // searchable attrs
062            BASIC_FIELDS.put("documentAttribute.notificationContentType", "testType");
063            BASIC_FIELDS.put("documentAttribute.notificationChannel", "testChannel");
064            BASIC_FIELDS.put("documentAttribute.notificationProducer", "testProducer");
065            BASIC_FIELDS.put("documentAttribute.notificationPriority", "testPriority");
066            BASIC_FIELDS.put("documentAttribute.notificationRecipients", "testRecipients");
067            BASIC_FIELDS.put("documentAttribute.notificationSenders", "testSenders");
068            BASIC_FIELDS.put("saveName", "testBasicSearchFields_saved_search");
069            BASIC_FIELDS.put("isAdvancedSearch", "NO");
070        }
071    
072        protected static final Map<String, String> ADVANCED_FIELDS = new HashMap<String, String>();
073        static {
074            ADVANCED_FIELDS.put("approverPrincipalName", "testApproverName");
075            ADVANCED_FIELDS.put("viewerPrincipalName", "testViewerName");
076            ADVANCED_FIELDS.put("applicationDocumentId", "testApplicationDocumentId");
077            // ADVANCED_FIELDS.put("routeNodeName", "Adhoc Routing");
078            ADVANCED_FIELDS.put("dateApproved", "01/01/01");
079            ADVANCED_FIELDS.put("dateLastModified", "02/02/02");
080            ADVANCED_FIELDS.put("dateFinalized", "03/03/03");
081            ADVANCED_FIELDS.put("title", "test title");
082            ADVANCED_FIELDS.put("isAdvancedSearch", "YES");
083        }
084    
085        String getDocSearchURL(Map<String, String> params) {
086            StringBuilder sb = new StringBuilder();
087            for (Map.Entry<String, String> entry: params.entrySet()) {
088                sb.append(URLEncoder.encode(entry.getKey()) + "=" + URLEncoder.encode(entry.getValue()) + "&");
089            }
090            return getDocSearchURL(sb.toString());
091            
092        }
093        protected String getDocSearchURL(String params) {
094            return ITUtil.getBaseUrlString() + "/kew/DocumentSearch.do?" + params;
095        }
096        
097        private WebElement findElementByTagAndName(String tag, String name) {
098            return driver.findElement(By.cssSelector(tag + "[name=" + name + "]"));
099        }
100        
101        private WebElement findInput(String name) {
102            return driver.findElement(By.xpath("//input[@name='" + name + "']"));
103        }
104        
105        protected WebElement findModeToggleButton() {
106            WebElement toggleAdvancedSearch = null;
107            try {
108                return driver.findElement(By.id("toggleAdvancedSearch"));
109            } catch (NoSuchElementException e) {
110                fail("toggleAdvancedSearch button not found");
111                return null;
112            }
113        }
114    
115        protected void assertSearchDetailMode(WebElement e, boolean advanced) {
116            assertEquals((advanced ? "basic" : "detailed") + " search", e.getAttribute("title"));
117    
118            try {
119                findInput(ADVANCED_SEARCH_ONLY_FIELD);
120                if (!advanced) fail("Advanced search field found in basic search");
121            } catch (NoSuchElementException nsee) {
122                if (advanced) fail("Advanced search field not found in advancedsearch");
123            }
124        }
125    
126        protected void assertInputValues(Map<String, String> fields) {
127            boolean quickmode = false;
128            for (Map.Entry<String, String> entry: fields.entrySet()) {
129                String value = findInput(entry.getKey()).getAttribute("value");
130                assertEquals("Field '" + entry.getKey() + "' expected '" + entry.getValue() + "' got '" + value + "'", entry.getValue(), value);
131                if (!quickmode) { // do the first find slow to make sure the screen has finished loading, then do them fast, else some tests take minutes to run
132                    driver.manage().timeouts().implicitlyWait(WebDriverUtil.SHORT_IMPLICIT_WAIT_TIME, TimeUnit.SECONDS);
133                    quickmode = true;
134                }
135            }
136            if (quickmode) {
137                driver.manage().timeouts().implicitlyWait(WebDriverUtil.DEFAULT_IMPLICIT_WAIT_TIME, TimeUnit.SECONDS);
138            }
139        }
140    
141        protected void assertInputPresence(Map<String, String> fields, boolean present) {
142            boolean quickmode = false;
143            for (String name: fields.keySet()) {
144                if (present) {
145                    assertTrue("Expected field '" + name + "' to be present", driver.findElements(By.name(name)).size() != 0);
146                } else {
147                    assertEquals("Expected field '" + name + "' not to be present", 0, driver.findElements(By.name(name)).size());
148                }
149                if (!quickmode) { // do the first find slow to make sure the screen has finished loading, then do them fast, else some tests take minutes to run
150                    driver.manage().timeouts().implicitlyWait(WebDriverUtil.SHORT_IMPLICIT_WAIT_TIME, TimeUnit.SECONDS);
151                    quickmode = true;
152                }
153            }
154            if (quickmode) {
155                driver.manage().timeouts().implicitlyWait(WebDriverUtil.DEFAULT_IMPLICIT_WAIT_TIME, TimeUnit.SECONDS);
156            }
157        }
158    }