1 20 package org.openi.web.controller.admin; 21 22 import junit.framework.TestCase; 23 import org.apache.log4j.Logger; 24 import org.openi.analysis.Datasource; 25 import org.openi.application.Application; 26 import org.openi.project.Project; 27 import org.openi.project.ProjectContext; 28 import org.openi.test.Util; 29 import org.openi.xml.*; 30 import org.springframework.context.ApplicationContext; 31 import org.springframework.context.support.FileSystemXmlApplicationContext; 32 import org.springframework.mock.web.*; 33 import org.springframework.validation.BindException; 34 import org.springframework.web.servlet.ModelAndView; 35 import java.io.IOException ; 36 import java.util.Iterator ; 37 import java.util.Map ; 38 import javax.servlet.ServletException ; 39 import javax.servlet.http.HttpServletRequest ; 40 import javax.servlet.http.HttpServletResponse ; 41 42 43 50 public class DatasourceFormControllerTest extends TestCase { 51 private static Logger logger = Logger.getLogger(DatasourceFormControllerTest.class); 52 public static final String TEST_PROJECT_NAME = "project.xml"; 53 private ApplicationContext appContext; 54 private DatasourceFormController ds; 55 private MockHttpServletRequest request; 56 private HttpServletResponse response; 57 private ModelAndView mv; 58 private Application application; 59 private Project project; 60 private BeanStorage beanStorage; 61 private ProjectContext projectContext; 62 63 67 public DatasourceFormControllerTest(String arg0) { 68 super(arg0); 69 } 70 71 75 public void setUp() throws Exception { 76 String dirName = Util.findTestDirectory() + "/" 77 + (this.getClass().getPackage().getName()).replace('.', '/'); 78 79 appContext = new FileSystemXmlApplicationContext(dirName 80 + "/../WEB-INF/springapp-servlet.xml"); 81 82 ds = (DatasourceFormController) appContext.getBean( 83 "datasourceFormController"); 84 85 request = new MockHttpServletRequest("POST", "/datasource.htm"); 86 87 response = new MockHttpServletResponse(); 88 89 beanStorage = new BeanStorage(); 90 91 application = Application.getInstance(); 92 93 application.setBasicAuthentication(false); 94 95 projectContext = getTestProjectContext(); 96 97 request.getSession().setAttribute("projectContext", projectContext); 98 } 99 100 104 public void testAddView() throws Exception { 105 logger.debug("testing add datasource ...."); 106 107 removeRequestAttribute(); 108 109 request.addParameter("action", "Add"); 110 111 request.addParameter("formType", "Add"); 112 113 mv = ds.handleRequest(request, new MockHttpServletResponse()); 114 115 removeRequestAttribute(); 116 117 assertEquals("editDatasourceView", mv.getViewName()); 118 119 Map model = (Map ) mv.getModel().get(ds.getCommandName()); 120 121 assertNotNull(model.get("formType")); 122 123 assertEquals("Add", model.get("formType")); 124 } 125 126 130 public void testEditView() throws Exception { 131 logger.debug("testing add datasource ...."); 132 133 removeRequestAttribute(); 134 135 String datasource = (String ) projectContext.getProject() 136 .getDataSourceMap().keySet() 137 .toArray()[0]; 138 139 Datasource datasrc = projectContext.getDatasource(datasource); 140 141 request.addParameter("action", "Edit"); 142 143 request.addParameter("formType", "Edit"); 144 145 request.addParameter("dataSource", datasource); 146 147 mv = ds.handleRequest(request, new MockHttpServletResponse()); 148 149 removeRequestAttribute(); 150 151 assertEquals("editDatasourceView", mv.getViewName()); 152 153 Map model = (Map ) mv.getModel().get(ds.getCommandName()); 154 155 assertNotNull(model.get("formType")); 156 157 assertEquals(datasource, (String ) model.get("dataSource")); 158 159 assertEquals("Edit", (String ) model.get("formType")); 160 161 assertEquals(datasrc.getServer(), (String ) model.get("server")); 162 163 assertEquals(datasrc.getCatalog(), (String ) model.get("selectedCatalog")); 164 } 165 166 172 public void testAddNewAndDeleteDatasource() throws Exception { 173 removeRequestAttribute(); 174 175 AddNewDatasource(); 176 177 logger.debug("Datasource added! \ndeleting 'testdatasource'..."); 178 179 request.addParameter("action", "Delete"); 180 181 request.addParameter("dataSource", "testdatasource"); 182 183 mv = ds.handleRequest(request, new MockHttpServletResponse()); 184 185 removeRequestAttribute(); 186 187 assertEquals("mainDatasourceView", mv.getViewName()); 188 189 Map model = (Map ) mv.getModel().get(ds.getCommandName()); 190 191 assertNotNull(model); 192 193 Map dsMap = (Map ) model.get("datasourceMap"); 194 195 assertNotNull(dsMap); 196 197 Datasource datasource = (Datasource) dsMap.get("testdatasource"); 198 199 assertNull(datasource); 200 201 logger.debug("deleted 'testdatasource'"); 202 } 203 204 210 public void testAddNewAndEditDatasource() throws Exception { 211 removeRequestAttribute(); 212 213 AddNewDatasource(); 214 215 logger.debug("Datasource added!"); 216 217 logger.debug( 218 "Editing 'testdatasource' as server='http://127.0.0.1:80/xmla/msxisapi.dll' and catalog='FoodMart 2001'..."); 219 220 request.addParameter("action", "Save"); 221 222 request.addParameter("formType", "Edit"); 223 224 request.addParameter("dataSource", "testdatasource"); 225 226 request.addParameter("server", "http://127.0.0.1:80/xmla/msxisapi.dll"); 227 228 request.addParameter("catalog", "FoodMart 2001"); 229 230 mv = ds.handleRequest(request, new MockHttpServletResponse()); 231 232 removeRequestAttribute(); 233 234 Map model = (Map ) mv.getModel().get(ds.getCommandName()); 235 236 assertNotNull(model); 237 238 assertNull(model.get("errorMessage")); 239 240 Map dsMap = (Map ) model.get("datasourceMap"); 241 242 assertNotNull(dsMap); 243 244 Datasource datasource = (Datasource) dsMap.get("testdatasource"); 245 246 assertNotNull(datasource); 247 248 assertEquals("http://127.0.0.1:80/xmla/msxisapi.dll", 249 datasource.getServer()); 250 251 assertEquals("FoodMart 2001", datasource.getCatalog()); 252 253 assertEquals("mainDatasourceView", mv.getViewName()); 254 } 255 256 private void AddNewDatasource() throws Exception { 257 logger.debug("Adding new datasource entry...."); 258 259 removeRequestAttribute(); 260 261 logger.debug("testing entry of 'testdatasource' in config file.."); 262 263 if (projectContext.getDatasource("testdatasource") != null) { 264 logger.debug( 265 "found entry for 'testdatasource' in config file\n deleting entry.."); 266 267 projectContext.getProject().getDataSourceMap() 268 .remove("testdatasource"); 269 270 projectContext.saveProject(); 271 } 272 273 request.addParameter("action", "Save"); 274 275 request.addParameter("formType", "Add"); 276 277 logger.debug( 278 "Adding datasource 'testdatasource' as server='http://localhost:80/xmla/msxisapi.dll' and catalog='FoodMart 2000'...."); 279 280 request.addParameter("dataSource", "testdatasource"); 281 282 request.addParameter("server", "http://localhost:80/xmla/msxisapi.dll"); 283 284 request.addParameter("catalog", "FoodMart 2000"); 285 286 mv = ds.handleRequest(request, new MockHttpServletResponse()); 287 288 removeRequestAttribute(); 289 290 assertEquals("mainDatasourceView", mv.getViewName()); 291 292 Map model = (Map ) mv.getModel().get(ds.getCommandName()); 293 294 assertNotNull(model); 295 296 assertNull(model.get("errorMessage")); 297 298 Map dsMap = (Map ) model.get("datasourceMap"); 299 300 assertNotNull(dsMap); 301 302 Datasource datasource = (Datasource) dsMap.get("testdatasource"); 303 304 assertNotNull(datasource); 305 306 assertEquals("http://localhost:80/xmla/msxisapi.dll", 307 datasource.getServer()); 308 309 assertEquals("FoodMart 2000", datasource.getCatalog()); 310 } 311 312 private ProjectContext getTestProjectContext() throws Exception { 313 Project project = getTestProject(); 314 315 String username = "mouser"; 316 317 String baseDirectory = getTestProjectsDir(); 318 319 ProjectContext context = new ProjectContext(project, baseDirectory, 320 username); 321 322 return context; 323 } 324 325 private Project getTestProject() throws IOException { 326 String filename = getTestProjectsDir() + "/standard/" 327 + TEST_PROJECT_NAME; 328 329 project = (Project) beanStorage.restoreBeanFromFile(filename); 330 331 return project; 332 } 333 334 private String getTestProjectsDir() { 335 return Util.findTestDirectory() + "/projects"; 336 } 337 338 private void removeRequestAttribute() throws Exception { 339 request = new MockHttpServletRequest("POST", "/datasource.htm"); 340 341 request.getSession().setAttribute("projectContext", projectContext); 342 } 343 } 344 | Popular Tags |