001 /** 002 * Copyright 2005-2011 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.AdminMenuLegacyITBase; 019 import edu.samplu.common.ITUtil; 020 import org.junit.Ignore; 021 import org.junit.Rule; 022 import org.junit.Test; 023 import org.junit.rules.TemporaryFolder; 024 import org.openqa.selenium.By; 025 026 import java.io.File; 027 import java.io.FileWriter; 028 import java.util.ArrayList; 029 import java.util.List; 030 031 /** 032 * tests uploads of new users and group 033 * 034 * @author Kuali Rice Team (rice.collab@kuali.org) 035 */ 036 public class XMLIngesterLegacyIT extends AdminMenuLegacyITBase { 037 038 // values set by default for repeatable testing; left as configurable for load tests 039 private List<File> fileUploadList; 040 private int userCnt = Integer.valueOf(System.getProperty("test.xmlingester.user.cnt", "10")); 041 private boolean userPadding = Boolean.valueOf(System.getProperty("test.xmlingester.user.padding", "true")); 042 private String userPrefix = System.getProperty("test.xmlingester.user.prefix", ITUtil.DTS); 043 private String emailDomain = System.getProperty("test.xmlingester.user.email.domain", "@kuali.org"); 044 // group default values 045 private String groupId = System.getProperty("test.xmlingester.grp.id", "2203"); 046 private String groupNamespace = System.getProperty("test.xmlingester.grp.namespace","KUALI"); 047 private String groupName = System.getProperty("test.xmlingester.grp.name", "eDoc.Example1.IUPUI.Workgroup"); 048 private String groupDesc = System.getProperty("test.xmlingester.grp.desc", "Edoclite Documentation workgroup"); 049 050 @Rule 051 public TemporaryFolder folder= new TemporaryFolder(); 052 053 @Ignore 054 @Override 055 public void testCreateNewCancel() throws Exception {} 056 057 @Ignore 058 @Override 059 public void testEditCancel() throws Exception {} 060 061 062 @Override 063 protected String getLinkLocator() { 064 return "XML Ingester"; 065 } 066 067 @Override 068 public String getUserName() { 069 return "admin"; // xml ingestion requires admin permissions 070 } 071 072 @Override 073 public void setUp() throws Exception { 074 super.setUp(); 075 // generated load users and group resources 076 buildFileUploadList(); 077 078 } 079 080 private void buildFileUploadList() throws Exception { 081 fileUploadList = new ArrayList<File>(); 082 fileUploadList.add(generateLoadUsersFile(userCnt, userPrefix)); 083 fileUploadList.add(generateLoadGroupFile(userCnt, userPrefix)); 084 } 085 086 /** 087 * Generates a temporary file for given number of users and prefix 088 * 089 * @param numberOfUsers 090 * @param prefix 091 * @throws Exception 092 */ 093 private File generateLoadUsersFile(int numberOfUsers, String prefix) throws Exception { 094 File loadUsersFile = folder.newFile("loadtest-users.xml"); 095 096 java.util.Date date= new java.util.Date(); 097 098 FileWriter writer = new FileWriter(loadUsersFile); 099 writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); 100 writer.write("<data xmlns=\"ns:workflow\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"ns:workflow resource:WorkflowData\">\n"); 101 writer.write("\t<users xmlns=\"ns:workflow/User\" xsi:schemaLocation=\"ns:workflow/User resource:User\">\n"); 102 String count = ""; 103 String format = "%0" + (numberOfUsers + "").length() + "d"; 104 for(int i = 0; i < numberOfUsers; i++) { 105 if (userPadding) { 106 count = prefix + String.format(format, i); 107 } else { 108 count = prefix + i; 109 } 110 StringBuffer stringBuffer = new StringBuffer(); 111 stringBuffer.append("\t\t<user><principalId>lt" + count + "</principalId>"); 112 stringBuffer.append("<emplId>lt" + count + "emplid</emplId>"); 113 stringBuffer.append("<principalName>loadtester" + count + "</principalName>"); 114 stringBuffer.append("<givenName>Tester" + count + "</givenName>"); 115 stringBuffer.append("<lastName>McLoady" + count + "</lastName>"); 116 stringBuffer.append("<emailAddress>loadtester" + count + emailDomain + "</emailAddress>"); 117 stringBuffer.append("</user>\n"); 118 writer.write(stringBuffer.toString()); 119 } 120 writer.write("\t</users>\n</data>\n"); 121 writer.close(); 122 return loadUsersFile; 123 } 124 125 /** 126 * Generates a temporary file for a group given number of users and principal name prefix 127 * 128 * 129 * @param numberOfUsers 130 * @param prefix 131 * @return 132 * @throws Exception 133 */ 134 private File generateLoadGroupFile(int numberOfUsers, String prefix) throws Exception { 135 File loadGroupFile = folder.newFile("loadtest-group.xml"); 136 137 FileWriter writer = new FileWriter(loadGroupFile); 138 writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); 139 writer.write("<data xmlns=\"ns:workflow\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"ns:workflow resource:WorkflowData\">\n"); 140 writer.write("\t<groups xmlns=\"ns:workflow/Group\" xsi:schemaLocation=\"ns:workflow/Group resource:Group\">\n"); 141 writer.write("\t\t<group><id>" + groupId + "</id><namespace>" + groupNamespace + "</namespace><description>" + groupDesc + "</description>"); 142 writer.write("<name>" + groupName + "</name>"); 143 writer.write("<members>"); 144 writer.write("<principalName>admin</principalName>"); 145 writer.write("<principalName>notsys</principalName>"); 146 String count = ""; 147 String format = "%0" + (numberOfUsers + "").length() + "d"; 148 for(int i = 0; i < numberOfUsers; i++) { 149 if (userPadding) { 150 count = prefix + String.format(format, i); 151 } else { 152 count = prefix + i; 153 } 154 StringBuffer stringBuffer = new StringBuffer(); 155 stringBuffer.append("<principalName>loadtester" + count + "</principalName>"); 156 writer.write(stringBuffer.toString()); 157 } 158 writer.write("\t\t</members>\n\t</group>\n</groups>\n</data>\n"); 159 writer.close(); 160 return loadGroupFile; 161 } 162 163 164 /** 165 * Based on load user and groups manual tests; load a dynamically generated user and group file into the xml ingester screen 166 * 167 */ 168 @Test 169 public void testXMLIngesterSuccessfulFileUpload() throws Exception { 170 gotoMenuLinkLocator(); 171 int cnt = 0; 172 for(File file : fileUploadList) { 173 String path = file.getAbsolutePath().toString(); 174 driver.findElement(By.name("file[" + cnt + "]")).sendKeys(path); 175 cnt++; 176 } 177 waitAndClickByXpath("//*[@id='imageField']"); 178 179 // confirm all files were uploaded successfully 180 for(File file: fileUploadList) { 181 assertTextPresent("Ingested xml doc: " + file.getName()); 182 } 183 passed(); 184 } 185 186 }