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 }