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 *
123 */
124 protected void testIngestion(Failable failable) throws Exception {
125 selectFrameIframePortlet();
126 List<File> fileUploadList = buildFileUploadList();
127 int cnt = 0;
128
129 for(File file : fileUploadList) {
130 String path = file.getAbsolutePath().toString();
131 driver.findElement(By.name("file[" + cnt + "]")).sendKeys(path);
132 cnt++;
133 }
134
135 waitAndClickByXpath("//*[@id='imageField']");
136
137 // confirm all files were uploaded successfully
138 for(File file: fileUploadList) {
139 assertTextPresent("Ingested xml doc: " + file.getName());
140 }
141 }
142
143 protected List<File> buildFileUploadList() throws Exception {
144 List<File> fileUploadList = new ArrayList<File>();
145 try {
146 // update properties with timestamp value if includeDTSinPrefix is true
147 Properties props = loadProperties(PROPS_LOCATION, DEFAULT_PROPS_LOCATION);
148 if(props.get("userIncludeDTSinPrefix") != null
149 && "true".equalsIgnoreCase((String) props.get("userIncludeDTSinPrefix"))) {
150 props.setProperty("userPrefix", "" + props.get("userPrefix") + ITUtil.DTS);
151 }
152 systemPropertiesOverride(props, "XMLIngester");
153
154 // build files and add to array
155 fileUploadList.add(
156 writeTemplateToFile(newTempFile("loadtest-users.xml"), cfg.getTemplate(TMPL_USER_CONTENT), props));
157 fileUploadList.add(
158 writeTemplateToFile(newTempFile("loadtest-group.xml"), cfg.getTemplate(TMPL_GROUP_CONTENT), props));
159 } catch( Exception e) {
160 throw new Exception("Unable to generate files for upload", e);
161 }
162
163 return fileUploadList;
164 }
165 }