package com.codepoetics.octarine.records; import com.codepoetics.octarine.records.example.Address; import com.codepoetics.octarine.records.example.Person; import com.codepoetics.octarine.testutils.ARecord; import org.junit.Test; import java.awt.*; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.hasItems; import static org.hamcrest.MatcherAssert.assertThat; public class ValidationTest { @Test public void schemas_validate_valid_records() { Validation<Person> validationResult = Person.schema.validate( Person.name.of("Alice Cowley"), Person.age.of(42), Person.favouriteColour.of(Color.CYAN), Person.address.of(Address.addressLines.of("12 Penguin Way", "HR9 5BH"))); assertThat(validationResult.isValid(), equalTo(true)); Valid<Person> person = validationResult.get(); assertThat(person, ARecord.instance().with(Person.name, "Alice Cowley")); } @Test public void schemas_collect_validation_errors() { Validation<Person> validationResult = Person.schema.validate( Person.name.of("Eric"), Person.age.of(-2), Person.address.of(Address.addressLines.of("12 Penguin Way", "HR9 5BH")) ); assertThat(validationResult.isValid(), equalTo(false)); assertThat(validationResult.validationErrors(), hasItems( "Missing key \"favourite colour\"", "Age must be 0 or greater" )); } @Test(expected = RecordValidationException.class) public void exception_is_thrown_if_valid_record_key_populated_with_invalid_values() { Person.address.of(Person.name.of("Address lines expected")); } }