package sample.util;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import java.util.List;
import org.junit.Test;
import sample.ValidationException;
import sample.ValidationException.Warn;
public class ValidatorTest {
@Test
public void ラムダ式ベースの検証() {
Validator.validate((v) -> {
boolean anyCheck = true;
v.checkField(anyCheck, "name", "error.name");
});
// フィールドレベルのチェック
try {
Validator.validate((v) -> {
boolean anyCheck = false;
v.checkField(anyCheck, "name", "error.name");
v.checkField(anyCheck, "day", "error.day");
v.checkField(true, "description", "error.description");
});
fail();
} catch (ValidationException e) {
List<Warn> warns = e.list();
assertThat(warns.size(), is(2));
assertThat(warns.get(0).getField(), is("name"));
assertThat(warns.get(0).getMessage(), is("error.name"));
assertThat(warns.get(1).getField(), is("day"));
assertThat(warns.get(1).getMessage(), is("error.day"));
}
// グローバルチェック
try {
Validator.validate((v) -> {
boolean anyCheck = false;
v.check(anyCheck, "error.global");
});
fail();
} catch (ValidationException e) {
List<Warn> warns = e.list();
assertThat(warns.size(), is(1));
assertNull(warns.get(0).getField());
assertThat(warns.get(0).getMessage(), is("error.global"));
}
}
@Test
public void 手続きベースの検証() {
Validator v = new Validator();
boolean anyCheck = false;
v.checkField(anyCheck, "name", "error.name");
try {
v.verify();
fail();
} catch (ValidationException e) {
assertThat(e.getMessage(), is("error.name"));
}
}
}