package org.neo4j.shell.tools.imp; import org.junit.Before; import org.junit.Test; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.Relationship; import org.neo4j.graphdb.Transaction; import org.neo4j.kernel.internal.GraphDatabaseAPI; import org.neo4j.shell.ShellException; import org.neo4j.shell.impl.SameJvmClient; import org.neo4j.shell.kernel.GraphDatabaseShellServer; import org.neo4j.shell.tools.imp.format.MultiStatementCypherSubGraphExporterTest; import org.neo4j.test.TestGraphDatabaseFactory; import java.io.File; import java.io.Serializable; import java.rmi.RemoteException; import java.util.Collections; import java.util.Random; import java.util.Scanner; import static org.junit.Assert.assertEquals; import static org.neo4j.shell.tools.Asserts.assertCommand; import static org.neo4j.shell.tools.imp.ExportXmlGraphMLWriterTest.*; import static org.neo4j.shell.tools.imp.format.MultiStatementCypherSubGraphExporterTest.CLEANUP_SECTION; import static org.neo4j.shell.tools.imp.format.MultiStatementCypherSubGraphExporterTest.CONSTRAINT_SECTION; import static org.neo4j.shell.tools.imp.format.MultiStatementCypherSubGraphExporterTest.createData; /** * @author mh * @since 04.07.13 */ public class ExportCypherAppTest { private GraphDatabaseAPI db; private SameJvmClient client; @Test public void testExportCypher() throws Exception { createData(1000,db); assertCommand(client, "export-cypher -o target/test.cypher", null,null,"Wrote to Cypher-file target/test.cypher 2. 100%: nodes = 1000 rels = 2997 properties = 999 time"); } @Test public void testExportTinyGraph() throws Exception { createData(1,db); assertCommand(client, "export-cypher -o target/test.cypher", null, "Wrote to Cypher-file target/test.cypher 1. 100%: nodes = 1 rels = 0 properties = 0 time"); String fileContent = new Scanner(new File("target/test.cypher")).useDelimiter("\\Z").next(); assertEquals( "begin\n" + "CREATE (:`UNIQUE IMPORT LABEL` {`UNIQUE IMPORT ID`:0});\n" + "commit\n" + CONSTRAINT_SECTION + CLEANUP_SECTION ,fileContent+"\n"); } @Test public void testExportTinyGraphWithCypher() throws Exception { createData(2,db); assertCommand(client, "export-cypher -o target/test.cypher match(n) return n", null,"Wrote to Cypher-file target/test.cypher 1. 100%: nodes = 2 rels = 2 properties = 0 time"); String fileContent = new Scanner(new File("target/test.cypher")).useDelimiter("\\Z").next(); assertEquals( "begin\n" + "CREATE (:`UNIQUE IMPORT LABEL` {`UNIQUE IMPORT ID`:0});\n" + "CREATE (:`User` {`age`:43, `name`:\"User1\"});\n" + "commit\n" + CONSTRAINT_SECTION + CLEANUP_SECTION ,fileContent+"\n"); } @Test public void testExportTinyGraphWithCypherAndRelsInBetween() throws Exception { createData(2,db); assertCommand(client, "export-cypher -r -o target/test.cypher match (n)-[r]->() return n,r", null,null,"Wrote to Cypher-file target/test.cypher 2. 100%: nodes = 2 rels = 3 properties = 1 time"); String fileContent = new Scanner(new File("target/test.cypher")).useDelimiter("\\Z").next(); System.out.println(fileContent); assertEquals( "begin\n" + "CREATE (:`UNIQUE IMPORT LABEL` {`UNIQUE IMPORT ID`:0});\n" + "CREATE (:`User` {`age`:43, `name`:\"User1\"});\n" + "commit\n" + CONSTRAINT_SECTION + "begin\n" + "MATCH (n1:`UNIQUE IMPORT LABEL`{`UNIQUE IMPORT ID`:0}), (n2:`User`{`name`:\"User1\"}) CREATE (n1)-[:`KNOWS` {`since`:2011}]->(n2);\n"+ "commit\n" + CLEANUP_SECTION ,fileContent+"\n"); } @Before public void setUp() throws RemoteException, ShellException { db = (GraphDatabaseAPI) new TestGraphDatabaseFactory().newImpermanentDatabase(); client = new SameJvmClient(Collections.<String, Serializable>emptyMap(), new GraphDatabaseShellServer(db), new TestCtrlCHandler()); } }