package com.box.sdk;
import org.junit.Assert;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import com.eclipsesource.json.JsonArray;
import com.eclipsesource.json.JsonObject;
public class MetadataTest {
@Test
@Category(UnitTest.class)
public void testConstructor() {
Metadata m = new Metadata();
Assert.assertEquals("{}", m.toString());
}
@Test
@Category(UnitTest.class)
public void testCopyConstructor() {
Metadata m1 = new Metadata().add("/foo", "bar");
Metadata m2 = new Metadata(m1);
Assert.assertEquals("{\"foo\":\"bar\"}", m2.toString());
}
@Test
@Category(UnitTest.class)
public void testAdd() {
Metadata m = new Metadata().add("/foo", "bar");
JsonArray operations = JsonArray.readFrom(m.getPatch());
Assert.assertEquals(1, operations.size());
JsonObject op = operations.get(0).asObject();
Assert.assertEquals("add", op.get("op").asString());
Assert.assertEquals("/foo", op.get("path").asString());
Assert.assertEquals("bar", op.get("value").asString());
}
@Test
@Category(UnitTest.class)
public void testReplace() {
Metadata m = new Metadata().replace("/foo", "bar");
JsonArray operations = JsonArray.readFrom(m.getPatch());
Assert.assertEquals(1, operations.size());
JsonObject op = operations.get(0).asObject();
Assert.assertEquals("replace", op.get("op").asString());
Assert.assertEquals("/foo", op.get("path").asString());
Assert.assertEquals("bar", op.get("value").asString());
}
@Test
@Category(UnitTest.class)
public void testTest() {
Metadata m = new Metadata().test("/foo", "bar");
JsonArray operations = JsonArray.readFrom(m.getPatch());
Assert.assertEquals(1, operations.size());
JsonObject op = operations.get(0).asObject();
Assert.assertEquals("test", op.get("op").asString());
Assert.assertEquals("/foo", op.get("path").asString());
Assert.assertEquals("bar", op.get("value").asString());
}
@Test
@Category(UnitTest.class)
public void testRemove() {
Metadata m = new Metadata().remove("/foo");
JsonArray operations = JsonArray.readFrom(m.getPatch());
Assert.assertEquals(1, operations.size());
JsonObject op = operations.get(0).asObject();
Assert.assertEquals("remove", op.get("op").asString());
Assert.assertEquals("/foo", op.get("path").asString());
}
@Test
@Category(UnitTest.class)
public void testInvalidGet() {
Metadata m = new Metadata();
Assert.assertEquals(null, m.get("/foo"));
}
@Test(expected = IllegalArgumentException.class)
@Category(UnitTest.class)
public void testNullPath() {
new Metadata().add(null, "value");
}
@Test(expected = IllegalArgumentException.class)
@Category(UnitTest.class)
public void testInvalidPath() {
new Metadata().add("key", "value");
}
@Test
@Category(UnitTest.class)
public void testMetaProperties() {
String json = "{\"$id\":\"123\",\"$type\":\"my type\",\"$parent\":\"456\"}";
Metadata m = new Metadata(JsonObject.readFrom(json));
Assert.assertEquals("123", m.getID());
Assert.assertEquals("my type", m.getTypeName());
Assert.assertEquals("456", m.getParentID());
}
@Test
@Category(UnitTest.class)
public void testMissingMetaProperties() {
Metadata m = new Metadata();
Assert.assertEquals(null, m.getID());
Assert.assertEquals(null, m.getTypeName());
Assert.assertEquals(null, m.getParentID());
}
}