@Test
  public void testValidPayload() throws Exception {
    UserCreationPayload payload = new UserCreationPayload("jon", "jonsecret", "*****@*****.**");
    UserCreationValidator validator = new UserCreationValidator(payload);

    assertTrue(validator.isValid());
    assertTrue(validator.getErrors().isEmpty());
  }
  @Test
  public void testInvalidPayload_BadPassword() throws Exception {
    UserCreationPayload payload = new UserCreationPayload("jon", "abc123*", "*****@*****.**");
    UserCreationValidator validator = new UserCreationValidator(payload);

    assertFalse(validator.isValid());
    assertEquals(1, validator.getErrors().size());
    assertThat(validator.getErrors(), hasItem(new Error("400", "password-bad")));
  }
  @Test
  public void testInvalidPayload_BadEmail() throws Exception {
    UserCreationPayload payload = new UserCreationPayload("jon", "jonsecret", "jon@[email protected]");
    UserCreationValidator validator = new UserCreationValidator(payload);

    assertFalse(validator.isValid());
    assertEquals(1, validator.getErrors().size());
    assertThat(validator.getErrors(), hasItem(new Error("400", "email-bad-syntax")));
  }
  @Test
  public void testInvalidPayload_Empty() throws Exception {
    UserCreationPayload payload = new UserCreationPayload();
    UserCreationValidator validator = new UserCreationValidator(payload);

    assertFalse(validator.isValid());
    assertEquals(3, validator.getErrors().size());
    assertThat(
        validator.getErrors(),
        hasItems(
            new Error("400", "username"), new Error("400", "email"), new Error("400", "password")));
  }