@Override public Neo4jRule withFixture( String fixtureStatement ) { builder = builder.withFixture( fixtureStatement ); return this; }
@Override public Neo4jRule withFixture( Function<GraphDatabaseService, Void> fixtureFunction ) { builder = builder.withFixture( fixtureFunction ); return this; }
@Override public Neo4jRule withFixture( File cypherFileOrDirectory ) { builder = builder.withFixture( cypherFileOrDirectory ); return this; }
@Test public void shouldHandleFixturesWithSyntaxErrorsGracefully() throws Exception { // Given two files in the root folder File targetFolder = testDir.directory(); FileUtils.writeToFile( new File( targetFolder, "fixture1.cyp" ), "this is not a valid cypher statement", false ); // When try ( ServerControls ignore = getServerBuilder( targetFolder ) .withFixture( targetFolder ).newServer() ) { fail("Should have thrown exception"); } catch ( RuntimeException e ) { assertThat( e.getMessage(), equalTo( "Invalid input 't': expected <init> (line 1, column 1 (offset: 0))" + lineSeparator() + "\"this is not a valid cypher statement\"" + lineSeparator() + " ^" ) ); } }
@Test public void shouldAccepSingleCypherFileAsFixture() throws Exception { // Given File targetFolder = testDir.directory(); File fixture = new File( targetFolder, "fixture.cyp" ); FileUtils.writeToFile(fixture, "CREATE (u:User)" + "CREATE (a:OtherUser)", false); // When try ( ServerControls server = getServerBuilder( targetFolder ).withFixture( fixture ).newServer() ) { // Then HTTP.Response response = HTTP.POST( server.httpURI().toString() + "db/data/transaction/commit", quotedJson( "{'statements':[{'statement':'MATCH (n:User) RETURN n'}]}" ) ); assertThat( response.status(), equalTo( 200 ) ); assertThat(response.get( "results" ).get(0).get("data").size(), equalTo(1)); } }
@Test public void shouldHandleMultipleFixtures() throws Exception { // Given two files in the root folder File targetFolder = testDir.directory(); File fixture1 = new File( targetFolder, "fixture1.cyp" ); FileUtils.writeToFile( fixture1, "CREATE (u:User)\n" + "CREATE (a:OtherUser)", false); File fixture2 = new File( targetFolder, "fixture2.cyp" ); FileUtils.writeToFile( fixture2, "CREATE (u:User)\n" + "CREATE (a:OtherUser)", false); // When try ( ServerControls server = getServerBuilder( targetFolder ) .withFixture( fixture1 ) .withFixture( fixture2 ) .newServer() ) { // Then HTTP.Response response = HTTP.POST( server.httpURI().toString() + "db/data/transaction/commit", quotedJson( "{'statements':[{'statement':'MATCH (n:User) RETURN n'}]}" ) ); assertThat( response.get( "results" ).get(0).get("data").size(), equalTo(2)); } }
@Test public void shouldIgnoreEmptyFixtureFiles() throws Exception { // Given two files in the root folder File targetFolder = testDir.directory(); FileUtils.writeToFile( new File( targetFolder, "fixture1.cyp" ), "CREATE (u:User)\n" + "CREATE (a:OtherUser)", false ); FileUtils.writeToFile( new File( targetFolder, "fixture2.cyp" ), "", false ); // When try ( ServerControls server = getServerBuilder( targetFolder ) .withFixture( targetFolder ).newServer() ) { // Then HTTP.Response response = HTTP.POST( server.httpURI().toString() + "db/data/transaction/commit", quotedJson( "{'statements':[{'statement':'MATCH (n:User) RETURN n'}]}" ) ); assertThat( response.get( "results" ).get(0).get("data").size(), equalTo(1)); } }
@Test public void shouldHandleStringFixtures() throws Exception { // Given two files in the root folder File targetFolder = testDir.directory(); // When try ( ServerControls server = getServerBuilder( targetFolder ) .withFixture( "CREATE (a:User)" ) .newServer() ) { // Then HTTP.Response response = HTTP.POST( server.httpURI().toString() + "db/data/transaction/commit", quotedJson( "{'statements':[{'statement':'MATCH (n:User) RETURN n'}]}" ) ); assertThat( response.get( "results" ).get(0).get("data").size(), equalTo(1)); } }
@Test public void shouldAcceptFolderWithCypFilesAsFixtures() throws Exception { // Given two files in the root folder File targetFolder = testDir.directory(); FileUtils.writeToFile( new File( targetFolder, "fixture1.cyp" ), "CREATE (u:User)\n" + "CREATE (a:OtherUser)", false ); FileUtils.writeToFile( new File( targetFolder, "fixture2.cyp" ), "CREATE (u:User)\n" + "CREATE (a:OtherUser)", false ); // And given one file in a sub directory File subDir = new File( targetFolder, "subdirectory" ); subDir.mkdir(); FileUtils.writeToFile( new File( subDir, "subDirFixture.cyp" ), "CREATE (u:User)\n" + "CREATE (a:OtherUser)", false ); // When try ( ServerControls server = getServerBuilder( targetFolder ).withFixture( targetFolder ).newServer() ) { // Then HTTP.Response response = HTTP.POST( server.httpURI().toString() + "db/data/transaction/commit", quotedJson( "{'statements':[{'statement':'MATCH (n:User) RETURN n'}]}" ) ); assertThat( response.toString(), response.get( "results" ).get(0).get("data").size(), equalTo(3) ); } }
@Test public void shouldHandleFunctionFixtures() throws Exception { // Given two files in the root folder File targetFolder = testDir.directory(); // When try ( ServerControls server = getServerBuilder( targetFolder ) .withFixture( graphDatabaseService -> { try ( Transaction tx = graphDatabaseService.beginTx() ) { graphDatabaseService.createNode( Label.label( "User" ) ); tx.success(); } return null; } ) .newServer() ) { // Then HTTP.Response response = HTTP.POST( server.httpURI().toString() + "db/data/transaction/commit", quotedJson( "{'statements':[{'statement':'MATCH (n:User) RETURN n'}]}" ) ); assertThat( response.get( "results" ).get( 0 ).get( "data" ).size(), equalTo( 1 ) ); } }
@Override public Neo4jRule withFixture( File cypherFileOrDirectory ) { builder = builder.withFixture( cypherFileOrDirectory ); return this; }
@Override public Neo4jRule withFixture( String fixtureStatement ) { builder = builder.withFixture( fixtureStatement ); return this; }
@Override public Neo4jRule withFixture( Function<GraphDatabaseService, Void> fixtureFunction ) { builder = builder.withFixture( fixtureFunction ); return this; }
@BeforeClass public static void setUp() throws Exception { server = TestServerBuilders.newInProcessBuilder().withFixture(setup) .withConfig("dbms.security.auth_enabled", "false").newServer(); BOLT_URL = "'"+server.boltURI().toString()+"'"; db = new TestGraphDatabaseFactory().newImpermanentDatabaseBuilder().newGraphDatabase(); TestUtil.registerProcedure(db, Bolt.class); }
@BeforeClass public static void startServer() { serverControls = TestServerBuilders.newInProcessBuilder() .withFixture(database -> { database.execute("MATCH (n:CONSTRAINTED_NODE) DETACH DELETE n"); database.execute("CREATE CONSTRAINT ON (n:CONSTRAINTED_NODE) ASSERT n.name IS UNIQUE"); database.execute("CREATE (n:CONSTRAINTED_NODE {name: 'test'})"); return null; }).newServer(); }
@Test public void testMyExtensionWithFunctionFixture() throws Exception { // Given try ( ServerControls server = TestServerBuilders.newInProcessBuilder() .withExtension( "/myExtension", MyUnmanagedExtension.class ) .withFixture( new Function<GraphDatabaseService, Void>() { @Override public Void apply( GraphDatabaseService graphDatabaseService ) throws RuntimeException { try ( Transaction tx = graphDatabaseService.beginTx() ) { graphDatabaseService.createNode( DynamicLabel.label( "User" ) ); tx.success(); } return null; } } ) .newServer() ) { // When Result result = server.graph().execute( "MATCH (n:User) return n" ); // Then assertEquals( 1, IteratorUtil.count( result ) ); } } // END SNIPPET: testExtension