package com.thinkaurelius.faunus.formats.graphson;
import com.thinkaurelius.faunus.BaseTest;
import com.thinkaurelius.faunus.FaunusEdge;
import com.thinkaurelius.faunus.FaunusVertex;
import com.tinkerpop.blueprints.Edge;
import junit.framework.TestCase;
import org.codehaus.jettison.json.JSONObject;
import java.io.IOException;
import java.util.List;
import static com.tinkerpop.blueprints.Direction.IN;
import static com.tinkerpop.blueprints.Direction.OUT;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
public class FaunusGraphSONUtilityTest extends TestCase {
public void testParser1() throws IOException {
FaunusVertex vertex = FaunusGraphSONUtility.fromJSON("{\"_id\":1}");
assertEquals(vertex.getId(), 1l);
assertFalse(vertex.getEdges(OUT).iterator().hasNext());
}
public void testParser2() throws IOException {
FaunusVertex vertex = FaunusGraphSONUtility.fromJSON("{\"_id\":1, \"name\":\"marko\",\"age\":32}");
assertEquals(vertex.getId(), 1l);
assertFalse(vertex.getEdges(OUT).iterator().hasNext());
assertFalse(vertex.getEdges(IN).iterator().hasNext());
assertEquals(vertex.getPropertyKeys().size(), 2);
assertEquals(vertex.getProperty("name"), "marko");
assertEquals(vertex.getProperty("age"), 32);
}
public void testParser3() throws IOException {
FaunusVertex vertex = FaunusGraphSONUtility.fromJSON("{\"_id\":1, \"name\":\"marko\",\"age\":32, \"_outE\":[{\"_inV\":2, \"_label\":\"knows\"}, {\"_inV\":3, \"_label\":\"created\"}]}");
assertEquals(vertex.getId(), 1l);
assertTrue(vertex.getEdges(OUT).iterator().hasNext());
assertFalse(vertex.getEdges(IN).iterator().hasNext());
assertEquals(vertex.getPropertyKeys().size(), 2);
assertEquals(vertex.getProperty("name"), "marko");
assertEquals(vertex.getProperty("age"), 32);
List<Edge> edges = BaseTest.asList(vertex.getEdges(OUT));
for (final Edge edge : edges) {
assertTrue(edge.getLabel().equals("knows") || edge.getLabel().equals("created"));
}
assertEquals(edges.size(), 2);
}
public void testParser4() throws IOException {
FaunusVertex vertex = FaunusGraphSONUtility.fromJSON("{\"_id\":4, \"name\":\"josh\", \"age\":32, \"_outE\":[{\"_inV\":3, \"_label\":\"created\", \"weight\":0.4}, {\"_inV\":5, \"_label\":\"created\", \"weight\":1.0}], \"_inE\":[{\"_outV\":1, \"_label\":\"knows\", \"weight\":1.0}]}");
assertEquals(vertex.getId(), 4l);
assertTrue(vertex.getEdges(OUT).iterator().hasNext());
assertTrue(vertex.getEdges(IN).iterator().hasNext());
assertEquals(vertex.getPropertyKeys().size(), 2);
assertEquals(vertex.getProperty("name"), "josh");
assertEquals(vertex.getProperty("age"), 32);
List<Edge> edges = BaseTest.asList(vertex.getEdges(OUT));
for (final Edge edge : edges) {
assertTrue(edge.getLabel().equals("created"));
}
assertEquals(edges.size(), 2);
edges = BaseTest.asList(vertex.getEdges(IN));
for (final Edge edge : edges) {
assertTrue(edge.getLabel().equals("knows"));
assertEquals(edge.getProperty("weight"), 1);
}
assertEquals(edges.size(), 1);
}
public void testWriter1() throws Exception {
FaunusVertex marko = new FaunusVertex(1l);
marko.setProperty("name", "marko");
FaunusVertex stephen = new FaunusVertex(2l);
stephen.setProperty("name", "stephen");
FaunusVertex vadas = new FaunusVertex(3l);
vadas.setProperty("name", "vadas");
marko.addEdge(OUT, new FaunusEdge(marko.getIdAsLong(), stephen.getIdAsLong(), "knows")).setProperty("weight", 2);
marko.addEdge(IN, new FaunusEdge(vadas.getIdAsLong(), marko.getIdAsLong(), "knows")).setProperty("weight", 1);
JSONObject m = FaunusGraphSONUtility.toJSON(marko);
JSONObject s = FaunusGraphSONUtility.toJSON(stephen);
assertEquals(m.getString("name"), "marko");
assertEquals(m.getLong("_id"), 1l);
assertFalse(m.has("_type"));
assertEquals(m.getJSONArray("_outE").length(), 1);
assertEquals(m.getJSONArray("_outE").getJSONObject(0).getLong("weight"), 2);
assertFalse(m.getJSONArray("_outE").getJSONObject(0).has("_type"));
assertFalse(m.getJSONArray("_outE").getJSONObject(0).has("_outV"));
assertEquals("knows", m.getJSONArray("_outE").getJSONObject(0).optString("_label"));
assertEquals(m.getJSONArray("_inE").length(), 1);
assertEquals(m.getJSONArray("_inE").getJSONObject(0).getLong("weight"), 1);
assertFalse(m.getJSONArray("_inE").getJSONObject(0).has("_type"));
assertFalse(m.getJSONArray("_inE").getJSONObject(0).has("_inV"));
assertEquals("knows", m.getJSONArray("_inE").getJSONObject(0).optString("_label"));
assertEquals(s.getString("name"), "stephen");
assertEquals(s.getLong("_id"), 2l);
assertFalse(m.has("_type"));
assertNull(s.optJSONArray("_outE"));
assertNull(s.optJSONArray("_inE"));
}
}