package de.galan.verjson.samples;
import static de.galan.commons.test.Tests.*;
import static org.assertj.core.api.Assertions.*;
import net.javacrumbs.jsonunit.fluent.JsonFluentAssert;
import org.junit.Before;
import org.junit.Test;
import com.fasterxml.jackson.databind.JsonNode;
import de.galan.commons.test.AbstractTestParent;
import de.galan.commons.time.ApplicationClock;
import de.galan.verjson.core.Verjson;
import de.galan.verjson.core.VersionNotSupportedException;
import de.galan.verjson.core.Versions;
import de.galan.verjson.step.transformation.Transformation;
import de.galan.verjson.test.TestBean;
/**
* Test handling of unsupported versions
*
* @author daniel
*/
public class VerjsonVersionSupportedTest extends AbstractTestParent {
private Verjson<TestBean> verjson1;
private Verjson<TestBean> verjson2;
private TestBean bean;
@Before
public void before() {
verjson1 = Verjson.create(TestBean.class, null);
verjson2 = Verjson.create(TestBean.class, new TestBeanVersion());
bean = new TestBean().content("aaa").number(666L);
ApplicationClock.setUtc("2014-05-06T06:42:28Z");
}
@Test
public void writeVersion1() throws Exception {
String written = verjson1.write(bean);
JsonFluentAssert.assertThatJson(written).isEqualTo(readFile(getClass(), "sample-version-1.json"));
}
@Test
public void writeVersion2() throws Exception {
String written = verjson2.write(bean);
JsonFluentAssert.assertThatJson(written).isEqualTo(readFile(getClass(), "sample-version-2.json"));
}
@Test
public void readVersion1With1() throws Exception {
TestBean read = verjson1.read(readFile(getClass(), "sample-version-1.json"));
assertThat(read).isEqualTo(bean);
}
@Test
public void readVersion2With2() throws Exception {
TestBean read = verjson2.read(readFile(getClass(), "sample-version-2.json"));
assertThat(read).isEqualTo(bean);
}
@Test
public void readVersion1With2() throws Exception {
TestBean read = verjson2.read(readFile(getClass(), "sample-version-1.json"));
assertThat(read).isEqualTo(bean);
}
@Test
public void readVersion2With1() throws Exception {
try {
verjson1.read(readFile(getClass(), "sample-version-2.json"));
}
catch (VersionNotSupportedException ex) {
assertThat(ex.getVersionRequired()).isEqualTo(2L);
assertThat(ex.getVersionSupported()).isEqualTo(1L);
assertThat(ex.getMessage()).isEqualTo("Verjson<TestBean> only supports version '1', required version is '2'");
}
}
/*
@Test
public void readMissingNamespace() throws Exception {
try {
verjsonNs.read(readFile(getClass(), "sample-namespace-missing.json"));
}
catch (NamespaceMismatchException ex) {
assertThat(ex.getNamespaceDefined()).isEqualTo(NS_DEFINED);
assertThat(ex.getNamespaceGiven()).isNull();
assertThat(ex.getMessage()).isEqualTo("Verjson only supports namespace 'nejmzpahjz', element has no namespace");
}
}
@Test
public void readDifferentNamespace() throws Exception {
try {
verjsonNs.read(readFile(getClass(), "sample-namespace-different.json"));
}
catch (NamespaceMismatchException ex) {
assertThat(ex.getNamespaceDefined()).isEqualTo(NS_DEFINED);
assertThat(ex.getNamespaceGiven()).isEqualTo("diff");
assertThat(ex.getMessage()).isEqualTo("Verjson only supports namespace 'nejmzpahjz', element has namespace 'diff'");
}
}
@Test
public void readNoNamespace() throws Exception {
try {
verjsonNoNs.read(readFile(getClass(), "sample-namespace.json"));
}
catch (NamespaceMismatchException ex) {
assertThat(ex.getNamespaceDefined()).isNull();
assertThat(ex.getNamespaceGiven()).isEqualTo(NS_DEFINED);
assertThat(ex.getMessage()).isEqualTo("Verjson only supports empty namespace, element has namespace 'nejmzpahjz'");
}
}
*/
}
/** Test */
class TestBeanVersion extends Versions {
@Override
public void configure() {
add(1L, new Transformation() {
@Override
protected void transform(JsonNode node) {
// nothing
}
});
}
}