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 de.galan.commons.test.AbstractTestParent;
import de.galan.commons.time.ApplicationClock;
import de.galan.verjson.core.NamespaceMismatchException;
import de.galan.verjson.core.Verjson;
import de.galan.verjson.samples.v1.Example1;
import de.galan.verjson.samples.v1.Example1Versions;
/**
* Test namespace variations
*
* @author daniel
*/
public class VerjsonUsageNamespaceTest extends AbstractTestParent {
private final static String NS_DEFINED = "nejmzpahjz";
private Verjson<Example1> verjsonNs;
private Verjson<Example1> verjsonNoNs;
@Before
public void before() {
Example1Versions versions = new Example1Versions();
versions.setNamespace(NS_DEFINED);
verjsonNs = Verjson.create(Example1.class, versions);
verjsonNoNs = Verjson.create(Example1.class, new Example1Versions());
ApplicationClock.setUtc("2014-05-06T06:42:28Z");
}
@Test
public void writeNamespace() throws Exception {
String written = verjsonNs.write(Example1.createSample());
JsonFluentAssert.assertThatJson(written).isEqualTo(readFile(getClass(), "sample-namespace.json"));
}
@Test
public void readNamespace() throws Exception {
Example1 read = verjsonNs.read(readFile(getClass(), "sample-namespace.json"));
assertThat(read).isEqualTo(Example1.createSample());
}
@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'");
}
}
}