public void testValidate() throws Exception { final ConfigDirectory configDirectory = TestUtils.getTestConfigDirectory(); configDirectory.setCreateDirectories(false); final MockServletContext servletContext = new MockServletContext(); servletContext.setContextPath("sventon-test"); configDirectory.setServletContext(servletContext); final Application application = new Application(configDirectory, TestUtils.CONFIG_FILE_NAME); final ConfigCommandValidator validator = new ConfigCommandValidator(false); validator.setApplication(application); final ConfigCommand command = new ConfigCommand(); BindException exception = new BindException(command, "test"); validator.validate(command, exception); // An empty command is valid assertEquals(0, exception.getAllErrors().size()); // Invalid repository name command.setName("Illegal whitespace in name"); command.setRepositoryUrl("svn://domain.com/svn/"); command.setUserPassword(""); command.setUserName(""); validator.validate(command, exception); assertEquals(1, exception.getAllErrors().size()); assertEquals("config.error.illegal-name", exception.getFieldError("name").getCode()); exception = new BindException(command, "test"); // Empty name is not ok command.setName(""); command.setRepositoryUrl("svn://domain.com/svn/"); command.setUserPassword(""); command.setUserName(""); validator.validate(command, exception); assertEquals(1, exception.getAllErrors().size()); assertEquals("config.error.illegal-name", exception.getFieldError("name").getCode()); exception = new BindException(command, "test"); // Valid (typical) input command.setRepositoryUrl("svn://domain.com/svn/"); command.setName("default"); command.setUserPassword(""); command.setUserName(""); command.setCacheUserName(""); command.setCacheUserPassword(""); validator.validate(command, exception); assertEquals(0, exception.getAllErrors().size()); // Valid input, spaces will be trimmed command.setRepositoryUrl(" svn://domain.com/svn/ "); command.setUserPassword(""); command.setUserName(""); validator.validate(command, exception); assertEquals(0, exception.getAllErrors().size()); command.setUserPassword(null); command.setUserName(null); validator.validate(command, exception); assertEquals(0, exception.getAllErrors().size()); command.setRepositoryUrl(""); validator.validate(command, exception); assertEquals(1, exception.getAllErrors().size()); assertEquals("config.error.illegal-url", exception.getFieldError("repositoryUrl").getCode()); exception = new BindException(command, "test"); command.setRepositoryUrl("notavalidurl"); validator.validate(command, exception); assertEquals(1, exception.getAllErrors().size()); assertEquals("config.error.illegal-url", exception.getFieldError("repositoryUrl").getCode()); exception = new BindException(command, "test"); command.setRepositoryUrl("svn://domain.com/svn/"); command.setUserPassword(""); command.setUserName(""); validator.validate(command, exception); assertEquals(0, exception.getAllErrors().size()); // if user based access is used, test connection uid and pwd can be supplied command.setRepositoryUrl("svn://domain.com/svn/"); command.setName("default"); command.setUserPassword("admin"); command.setUserName("super-secret-pwd123"); command.setAccessMethod(USER); command.setCacheUserName(""); command.setCacheUserPassword(""); validator.validate(command, exception); assertEquals(0, exception.getAllErrors().size()); }