package com.lordofthejars.nosqlunit.graph.parser;
import static org.junit.Assert.assertThat;
import static org.xmlmatchers.XmlMatchers.isEquivalentTo;
import static org.xmlmatchers.transform.XmlConverters.the;
import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;
import javax.xml.stream.XMLStreamException;
import org.junit.Before;
import org.junit.Test;
import org.mockito.MockitoAnnotations;
import org.neo4j.graphdb.*;
import org.neo4j.test.TestGraphDatabaseFactory;
public class WhenExportingGraphMLStream {
private static final String EXPECTED_GRAPH = "<?xml version=\"1.0\" ?><graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd\"><key id=\"weight\" for=\"edge\" attr.name=\"weight\" attr.type=\"float\"></key><key id=\"name\" for=\"node\" attr.name=\"name\" attr.type=\"string\"></key><graph id=\"G\" edgedefault=\"directed\"><node id=\"0\"><data key=\"name\">I</data></node><node id=\"1\"><data key=\"name\">You</data></node><edge id=\"0\" source=\"0\" target=\"1\" label=\"KNOWS\"><data key=\"weight\">0.5</data></edge></graph></graphml>";
private static final String EXPECTED_GRAPH_WITH_ARRAY ="<?xml version=\"1.0\" ?><graphml xmlns=\"http://graphml.graphdrawing.org/xmlns\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd\"><key id=\"weight\" for=\"edge\" attr.name=\"weight\" attr.type=\"float[]\"></key><key id=\"name\" for=\"node\" attr.name=\"name\" attr.type=\"string\"></key><graph id=\"G\" edgedefault=\"directed\"><node id=\"0\"><data key=\"name\">I</data></node><node id=\"1\"><data key=\"name\">You</data></node><edge id=\"0\" source=\"0\" target=\"1\" label=\"KNOWS\"><data key=\"weight\">0.5, 0.5</data></edge></graph></graphml>";
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void writer_Should_Write_Graph_To_GraphML_Format() throws XMLStreamException, UnsupportedEncodingException {
String generatedGraph = renderGraphToGraphML("I", "You", 0.5f);
assertThat(the(generatedGraph), isEquivalentTo(the(EXPECTED_GRAPH)));
}
@Test
public void writer_Should_Write_arrays_values_Graph_To_GraphML_Format() throws XMLStreamException, UnsupportedEncodingException {
String generatedGraph = renderGraphToGraphML("I", "You", new float[]{0.5f, 0.5f});
System.out.println(generatedGraph);
assertThat(the(generatedGraph), isEquivalentTo(the(EXPECTED_GRAPH_WITH_ARRAY)));
}
private String renderGraphToGraphML(String name1, String name2, Object weight) throws XMLStreamException, UnsupportedEncodingException {
String generatedGraph;GraphDatabaseService graphDatabase = new TestGraphDatabaseFactory().newImpermanentDatabase();
Transaction tx = graphDatabase.beginTx();
try {
Node node1 = graphDatabase.createNode();
node1.setProperty("name", name1);
Node node2 = graphDatabase.createNode();
node2.setProperty("name", name2);
Relationship relationship1 = node1.createRelationshipTo(node2, DynamicRelationshipType.withName("KNOWS"));
relationship1.setProperty("weight", weight);
GraphMLWriter graphMLWriter = new GraphMLWriter(graphDatabase);
ByteArrayOutputStream output = new ByteArrayOutputStream();
graphMLWriter.write(output);
generatedGraph = new String(output.toByteArray(), "UTF-8");
tx.success();
} finally {
tx.close();
graphDatabase.shutdown();
}
return generatedGraph;
}
}