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.admin.test;
017
018 import edu.samplu.common.Failable;
019 import edu.samplu.common.FreemarkerSTBase;
020 import edu.samplu.common.ITUtil;
021 import org.openqa.selenium.By;
022
023 import java.io.File;
024 import java.io.IOException;
025 import java.util.ArrayList;
026 import java.util.List;
027 import java.util.Properties;
028
029 /**
030 * Tests uploads of new users and group.
031 *
032 * @author Kuali Rice Team (rice.collab@kuali.org)
033 */
034
035 public abstract class XMLIngesterAbstractSmokeTestBase extends FreemarkerSTBase {
036
037 /**
038 * http://env12.rice.kuali.org/portal.do?channelTitle=XML%20Ingester&channelUrl=http://env12.rice.kuali.org/kew/../core/Ingester.do
039 */
040 public static final String BOOKMARK_URL = ITUtil.PORTAL + "?channelTitle=XML%20Ingester&channelUrl="
041 + ITUtil.getBaseUrlString() + "/kew/../core/Ingester.do";
042
043 // File generation
044 private String PROPS_LOCATION = System.getProperty("xmlingester.props.location", null);
045 private static final String DEFAULT_PROPS_LOCATION = "XML/xmlingester.properties";
046
047 // Templates for File Generation
048 private static final String DIR_TMPL = "/XML/";
049 private static final String TMPL_USER_CONTENT = "SimpleUserContent.ftl";
050 private static final String TMPL_GROUP_CONTENT = "SimpleGroupContent.ftl";
051
052 /**
053 *
054 * @param name of temp file to create
055 * @return tempFile
056 * @throws IOException
057 */
058 protected abstract File newTempFile(String name) throws IOException;
059
060 /**
061 * {@inheritDoc}
062 * {@link #DIR_TMPL}
063 * @return
064 */
065 @Override
066 protected String getTemplateDir() {
067 return DIR_TMPL;
068 }
069
070 /**
071 * Nav tests start at {@link ITUtil#PORTAL}. Bookmark Tests should override and return {@link XMLIngesterAbstractSmokeTestBase#BOOKMARK_URL}
072 * {@inheritDoc}
073 * @return
074 */
075 @Override
076 public String getTestUrl() {
077 return ITUtil.PORTAL;
078 }
079
080 /**
081 * "admin" xml ingestion requires admin permissions.
082 * {@inheritDoc}
083 * @return
084 */
085 @Override
086 public String getUserName() {
087 return "admin";
088 }
089
090 /**
091 * go to the getMenuLinkLocator() Menu and click the getLinkLocator()
092 */
093 protected void navigate(Failable failable) throws Exception {
094 selectTopFrame();
095 waitAndClickAdministration(failable);
096 waitForTitleToEqualKualiPortalIndex();
097 waitAndClickXMLIngester(failable);
098 selectFrameIframePortlet();
099 checkForIncidentReport("XML Ingester", failable, "");
100 }
101
102 /**
103 * Navigate to the page under test and call {@link #testIngestion}
104 *
105 * @param failable {@link edu.samplu.common.Failable}
106 * @throws Exception
107 */
108 protected void testIngestionNav(Failable failable) throws Exception {
109 navigate(failable);
110 testIngestion(failable);
111 passed();
112 }
113
114 protected void testIngestionBookmark(Failable failable) throws Exception {
115 testIngestion(failable);
116 passed();
117 }
118
119 /**
120 * Based on load user and groups manual tests; dynamically generates user and group file
121 * and loads into the xml ingester screen.
122 * This test should suffice for both KRAD and KNS versions of the ingester screen.
123 *
124 *
125 */
126 protected void testIngestion(Failable failable) throws Exception {
127 selectFrameIframePortlet();
128 List<File> fileUploadList = buildFileUploadList();
129 int cnt = 0;
130
131 for(File file : fileUploadList) {
132 String path = file.getAbsolutePath().toString();
133 if (isKrad()){
134 driver.findElement(By.name("files[" + cnt + "]")).sendKeys(path);
135 } else {
136 driver.findElement(By.name("file[" + cnt + "]")).sendKeys(path);
137 }
138 cnt++;
139 }
140
141 // Click the Upload Button
142 if (isKrad()){
143 waitAndClickByXpath("//button");
144 } else {
145 waitAndClickByXpath("//*[@id='imageField']");
146 }
147
148 // confirm all files were uploaded successfully
149 Thread.sleep(1000);
150 for(File file: fileUploadList) {
151 assertTextPresent("Ingested xml doc: " + file.getName());
152 }
153 }
154
155 protected List<File> buildFileUploadList() throws Exception {
156 List<File> fileUploadList = new ArrayList<File>();
157 try {
158 // update properties with timestamp value if includeDTSinPrefix is true
159 Properties props = loadProperties(PROPS_LOCATION, DEFAULT_PROPS_LOCATION);
160 if(props.get("userIncludeDTSinPrefix") != null
161 && "true".equalsIgnoreCase((String) props.get("userIncludeDTSinPrefix"))) {
162 props.setProperty("userPrefix", "" + props.get("userPrefix") + ITUtil.DTS);
163 }
164 systemPropertiesOverride(props, "XMLIngester");
165
166 // build files and add to array
167 fileUploadList.add(
168 writeTemplateToFile(newTempFile("loadtest-users.xml"), cfg.getTemplate(TMPL_USER_CONTENT), props));
169 fileUploadList.add(
170 writeTemplateToFile(newTempFile("loadtest-group.xml"), cfg.getTemplate(TMPL_GROUP_CONTENT), props));
171 } catch( Exception e) {
172 throw new Exception("Unable to generate files for upload", e);
173 }
174
175 return fileUploadList;
176 }
177 }