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    }