package com.googlecode.totallylazy.validations;
import org.junit.Test;
import static com.googlecode.totallylazy.functions.Callables.returnArgument;
import static com.googlecode.totallylazy.matchers.IterableMatcher.hasExactly;
import static com.googlecode.totallylazy.validations.Validators.validateThat;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.internal.matchers.StringContains.containsString;
public class LogicalValidatorTest {
@Test
public void allowsChainingValidationsUsingFirstFailure() {
LogicalValidator<String> containsOne = validateThat(containsString("not there")).
withMessage("First validator").
castValidator(String.class);
LogicalValidator<String> validator = containsOne.
andIfSo(validateThat(containsString("not there")).withMessage("Second validator"));
assertThat(
validator.validate("some string").allMessages(),
hasExactly("First validator"));
}
@Test
public void allowsChainingValidationsUsingAllOf() {
LogicalValidator<String> containsOne = validateThat(containsString("not there")).
withMessage("First validator").
castValidator(String.class);
LogicalValidator<String> validator = containsOne.
and(validateThat(containsString("not there")).
withMessage("Second validator"));
assertThat(
validator.validate("some string").allMessages(),
hasExactly("First validator", "Second validator"));
}
@Test
public void canReassignMessagesToANewKey() {
LogicalValidator<String> validator = validateThat(containsString("not there")).
withMessage("Validation failure").
assigningFailuresTo("A").
castValidator(String.class);
assertThat(
validator.validate("some string").
messages("A"),
hasExactly("Validation failure"));
}
@Test
public void canReassignMessagesToANewKeyAndThenChangeTheMessage() {
LogicalValidator<String> validator = validateThat(containsString("not there")).
assigningFailuresTo("A").
withMessage("Validation failure").
castValidator(String.class);
assertThat(
validator.validate("some string").
messages("A"),
hasExactly("Validation failure"));
}
@Test
public void allowsSettingOfMessageBasedOnValidatedValue() {
LogicalValidator<String> validator = validateThat(containsString("not there")).
castValidator(String.class).
withMessage(returnArgument(String.class));
assertThat(
validator.validate("some string").allMessages(),
hasExactly("some string"));
}
}