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());
  }
 public void testSupports() {
   final ConfigCommandValidator validator = new ConfigCommandValidator(false);
   assertTrue(validator.supports(ConfigCommand.class));
 }