package de.galan.verjson.examples.validation; import static org.assertj.core.api.Assertions.*; import org.junit.Before; import org.junit.Test; import de.galan.commons.test.AbstractTestParent; import de.galan.verjson.core.Verjson; import de.galan.verjson.test.TestBean; import de.galan.verjson.util.ReadException; /** * This example test shows how to use validators. We have two versions and two different JSON schemas. The * transformation itself does not have structural changes but semantical - the now required content-field will get * default content if empty. * * @author daniel */ public class ExampleValidationTest extends AbstractTestParent { private Verjson<TestBean> verjson; @Before public void before() { verjson = Verjson.create(TestBean.class, new ExampleValidationVersions()); } @Test public void version1WithContent() throws Exception { // {"$v":1,"$d":{"content":"abc","number":123}} TestBean read = verjson.read("{\"$v\":1,\"$d\":{\"content\":\"abc\",\"number\":123}}"); assertThat(read.content).isEqualTo("abc"); } @Test public void version1Without() throws Exception { // {"$v":1,"$d":{"number":123}} TestBean read = verjson.read("{\"$v\":1,\"$d\":{\"number\":123}}"); assertThat(read.content).isEqualTo("default"); } @Test public void version2Valid() throws Exception { TestBean bean = new TestBean().content("abc").number(123L); String written = verjson.write(bean); // {"$v":2,"$d":{"content":"abc","number":123}} TestBean read = verjson.read(written); assertThat(read).isEqualTo(bean); } @Test public void version2Invalid() throws Exception { TestBean bean = new TestBean().number(123L); // No content-field, but required in schema try { String written = verjson.write(bean); // {"$v":2,"$d":{"number":123}} verjson.read(written); } catch (ReadException ex) { assertThat(ex.getMessage()).isEqualTo("Could not validate JSON against schema:\n- object has missing required properties ([\"content\"])"); } } }