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.FreemarkerUtil;
021 import edu.samplu.common.ITUtil;
022 import freemarker.cache.ClassTemplateLoader;
023 import freemarker.template.Configuration;
024 import org.openqa.selenium.By;
025
026 import java.io.File;
027 import java.io.IOException;
028 import java.util.ArrayList;
029 import java.util.List;
030 import java.util.Properties;
031
032 /**
033 * Tests uploads of new users and group.
034 *
035 * @author Kuali Rice Team (rice.collab@kuali.org)
036 */
037
038 public abstract class XMLIngesterAbstractSmokeTestBase extends FreemarkerSTBase {
039
040 /**
041 * http://env12.rice.kuali.org/portal.do?channelTitle=XML%20Ingester&channelUrl=http://env12.rice.kuali.org/kew/../core/Ingester.do
042 */
043 public static final String BOOKMARK_URL = ITUtil.PORTAL + "?channelTitle=XML%20Ingester&channelUrl="
044 + ITUtil.getBaseUrlString() + "/kew/../core/Ingester.do";
045
046 // File generation
047 private String PROPS_LOCATION = System.getProperty("xmlingester.props.location", null);
048 private static final String DEFAULT_PROPS_LOCATION = "XML/xmlingester.properties";
049
050 // Templates for File Generation
051 private static final String DIR_TMPL = "/XML/";
052 private static final String TMPL_USER_CONTENT = "SimpleUserContent.ftl";
053 private static final String TMPL_GROUP_CONTENT = "SimpleGroupContent.ftl";
054
055 /**
056 *
057 * @param name of temp file to create
058 * @return tempFile
059 * @throws IOException
060 */
061 protected abstract File newTempFile(String name) throws IOException;
062
063 /**
064 * Nav tests start at {@link ITUtil#PORTAL}. Bookmark Tests should override and return {@link XMLIngesterAbstractSmokeTestBase#BOOKMARK_URL}
065 * {@inheritDoc}
066 * @return
067 */
068 @Override
069 public String getTestUrl() {
070 return ITUtil.PORTAL;
071 }
072
073 /**
074 * "admin" xml ingestion requires admin permissions.
075 * {@inheritDoc}
076 * @return
077 */
078 @Override
079 public String getUserName() {
080 return "admin";
081 }
082
083 /**
084 * go to the getMenuLinkLocator() Menu and click the getLinkLocator()
085 */
086 protected void navigate(Failable failable) throws Exception {
087 selectTopFrame();
088 waitAndClickAdministration(failable);
089 waitForTitleToEqualKualiPortalIndex();
090 waitAndClickXMLIngester(failable);
091 selectFrameIframePortlet();
092 checkForIncidentReport("XML Ingester", failable, "");
093 }
094
095 @Override
096 public void setUp() throws Exception {
097 super.setUp();
098 // generated load users and group resources
099 cfg = new Configuration();
100 cfg.setTemplateLoader(new ClassTemplateLoader(getClass().getClassLoader().getClass(), DIR_TMPL));
101 }
102
103 /**
104 * Navigate to the page under test and call {@link #testIngestion}
105 *
106 * @param failable {@link edu.samplu.common.Failable}
107 * @throws Exception
108 */
109 protected void testIngestionNav(Failable failable) throws Exception {
110 navigate(failable);
111 testIngestion(failable);
112 passed();
113 }
114
115 protected void testIngestionBookmark(Failable failable) throws Exception {
116 testIngestion(failable);
117 passed();
118 }
119
120 /**
121 * Based on load user and groups manual tests; dynamically generates user and group file
122 * and loads into the xml ingester screen
123 *
124 */
125 protected void testIngestion(Failable failable) throws Exception {
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 }