diff --git a/.github/workflows/hqps-db-ci.yml b/.github/workflows/hqps-db-ci.yml index 08b52da99ffd..a211350a379a 100644 --- a/.github/workflows/hqps-db-ci.yml +++ b/.github/workflows/hqps-db-ci.yml @@ -87,7 +87,8 @@ jobs: INTERACTIVE_WORKSPACE: /tmp/interactive_workspace run: | # download dataset - git clone -b master --single-branch --depth=1 https://github.com/GraphScope/gstest.git ${GS_TEST_DIR} + #git clone -b master --single-branch --depth=1 https://github.com/GraphScope/gstest.git ${GS_TEST_DIR} + git clone -b master --single-branch --depth=1 https://github.com/zhanglei1949/gstest.git ${GS_TEST_DIR} mkdir -p ${INTERACTIVE_WORKSPACE}/data/ldbc GRAPH_SCHEMA_YAML=${GS_TEST_DIR}/flex/ldbc-sf01-long-date/audit_graph_schema.yaml cp ${GRAPH_SCHEMA_YAML} ${INTERACTIVE_WORKSPACE}/data/ldbc/graph.yaml @@ -131,6 +132,18 @@ jobs: eval ${cmd} done + # test movie graph, 8,9,10 are not supported now + cp ${GS_TEST_DIR}/flex/movies/movies_schema.yaml ${INTERACTIVE_WORKSPACE}/data/ldbc/graph.yaml + for i in 1 2 3 4 5 6 7 11 12 13 14 15; + do + cmd="./load_plan_and_gen.sh -e=hqps -i=../tests/hqps/queries/movie/query${i}.cypher -w=/tmp/codgen/" + cmd=${cmd}" -o=/tmp/plugin --ir_conf=${GS_TEST_DIR}/flex/ldbc-sf01-long-date/engine_config.yaml " + cmd=${cmd}" --graph_schema_path=${GS_TEST_DIR}/flex/movies/movies_schema.yaml" + cmd=${cmd}" --gie_home=${GIE_HOME}" + echo $cmd + eval ${cmd} + done + - name: Run End-to-End cypher adhoc query test env: GS_TEST_DIR: ${{ github.workspace }}/gstest diff --git a/flex/interactive/examples/modern_graph/get_person_name.cypher b/flex/interactive/examples/modern_graph/get_person_name.cypher index f8c9f275ae4e..fbb3197f3849 100644 --- a/flex/interactive/examples/modern_graph/get_person_name.cypher +++ b/flex/interactive/examples/modern_graph/get_person_name.cypher @@ -1 +1 @@ -MATCH(p : person {id: $personId}) RETURN p.name; \ No newline at end of file +MATCH(p : person {id: $personId}) RETURN p.name; diff --git a/flex/tests/hqps/hqps_cypher_test.sh b/flex/tests/hqps/hqps_cypher_test.sh index 1cb4837dfccf..0d2798b48037 100644 --- a/flex/tests/hqps/hqps_cypher_test.sh +++ b/flex/tests/hqps/hqps_cypher_test.sh @@ -37,7 +37,6 @@ if [ ! -d ${INTERACTIVE_WORKSPACE} ]; then fi ENGINE_CONFIG_PATH=${GS_TEST_DIR}/flex/ldbc-sf01-long-date/engine_config.yaml -ORI_GRAPH_SCHEMA_YAML=${GS_TEST_DIR}/flex/ldbc-sf01-long-date/audit_graph_schema.yaml GRAPH_SCHEMA_YAML=${INTERACTIVE_WORKSPACE}/data/ldbc/graph.yaml GRAPH_BULK_LOAD_YAML=${GS_TEST_DIR}/flex/ldbc-sf01-long-date/audit_bulk_load.yaml COMPILER_GRAPH_SCHEMA=${GS_TEST_DIR}/flex/ldbc-sf01-long-date/audit_graph_schema.yaml @@ -142,12 +141,27 @@ run_simple_test(){ popd } +run_movie_test(){ + echo "run movie test" + pushd ${GIE_HOME}/compiler + cmd="mvn test -Dtest=com.alibaba.graphscope.cypher.integration.movie.MovieTest" + echo "Start movie test: ${cmd}" + ${cmd} + info "Finish movie test" + popd +} + kill_service start_engine_service start_compiler_service run_ldbc_test run_simple_test kill_service +start_engine_service +start_compiler_service +# test on movie graph +run_movie_test +kill_service diff --git a/flex/tests/hqps/queries/movie/query1.cypher b/flex/tests/hqps/queries/movie/query1.cypher new file mode 100644 index 000000000000..d08ec9d27a68 --- /dev/null +++ b/flex/tests/hqps/queries/movie/query1.cypher @@ -0,0 +1 @@ +MATCH (tom:Person) WHERE tom.name = "Tom Hanks" RETURN tom.born AS bornYear,tom.name AS personName; \ No newline at end of file diff --git a/flex/tests/hqps/queries/movie/query10.cypher b/flex/tests/hqps/queries/movie/query10.cypher new file mode 100644 index 000000000000..4787fc5f03ec --- /dev/null +++ b/flex/tests/hqps/queries/movie/query10.cypher @@ -0,0 +1,4 @@ +MATCH p=shortestPath( + (bacon:Person {name:"Kevin Bacon"})-[*]-(meg:Person {name:"Meg Ryan"}) +) +RETURN p; \ No newline at end of file diff --git a/flex/tests/hqps/queries/movie/query11.cypher b/flex/tests/hqps/queries/movie/query11.cypher new file mode 100644 index 000000000000..dce31d22c22c --- /dev/null +++ b/flex/tests/hqps/queries/movie/query11.cypher @@ -0,0 +1,2 @@ +MATCH (tom:Person {name: 'Tom Hanks'})-[r:ACTED_IN]->(movie:Movie) +RETURN tom.id AS personId, movie.title as movieTitle, movie.released as movieReleased; \ No newline at end of file diff --git a/flex/tests/hqps/queries/movie/query12.cypher b/flex/tests/hqps/queries/movie/query12.cypher new file mode 100644 index 000000000000..5f7f64a02c7a --- /dev/null +++ b/flex/tests/hqps/queries/movie/query12.cypher @@ -0,0 +1,2 @@ +MATCH (tom:Person {name: 'Tom Hanks'})-[:ACTED_IN]->(:Movie)<-[:ACTED_IN]-(coActor:Person) +RETURN coActor.name; \ No newline at end of file diff --git a/flex/tests/hqps/queries/movie/query13.cypher b/flex/tests/hqps/queries/movie/query13.cypher new file mode 100644 index 000000000000..90b890ab0899 --- /dev/null +++ b/flex/tests/hqps/queries/movie/query13.cypher @@ -0,0 +1,4 @@ +MATCH (tom:Person {name: 'Tom Hanks'})-[:ACTED_IN]->(movie1:Movie)<-[:ACTED_IN]-(coActor:Person)-[:ACTED_IN]->(movie2:Movie)<-[:ACTED_IN]-(coCoActor:Person) +WHERE tom <> coCoActor +AND NOT (tom)-[:ACTED_IN]->(:Movie)<-[:ACTED_IN]-(coCoActor) +RETURN coCoActor.name \ No newline at end of file diff --git a/flex/tests/hqps/queries/movie/query14.cypher b/flex/tests/hqps/queries/movie/query14.cypher new file mode 100644 index 000000000000..c872529024b2 --- /dev/null +++ b/flex/tests/hqps/queries/movie/query14.cypher @@ -0,0 +1,6 @@ +MATCH (tom:Person {name: 'Tom Hanks'})-[:ACTED_IN]->(movie1:Movie)<-[:ACTED_IN]-(coActor:Person)-[:ACTED_IN]->(movie2:Movie)<-[:ACTED_IN]-(coCoActor:Person) +WHERE tom <> coCoActor +AND NOT (tom)-[:ACTED_IN]->(:Movie)<-[:ACTED_IN]-(coCoActor) +RETURN coCoActor.name, count(coCoActor) as frequency +ORDER BY frequency DESC +LIMIT 5; \ No newline at end of file diff --git a/flex/tests/hqps/queries/movie/query15.cypher b/flex/tests/hqps/queries/movie/query15.cypher new file mode 100644 index 000000000000..d94b9afcd102 --- /dev/null +++ b/flex/tests/hqps/queries/movie/query15.cypher @@ -0,0 +1,3 @@ +MATCH (tom:Person {name: 'Tom Hanks'})-[:ACTED_IN]->(movie1:Movie)<-[:ACTED_IN]-(coActor:Person)-[:ACTED_IN]->(movie2:Movie)<-[:ACTED_IN]-(cruise:Person {name: 'Tom Cruise'}) +WHERE NOT (tom)-[:ACTED_IN]->(:Movie)<-[:ACTED_IN]-(cruise) +RETURN tom.name AS actorName, movie1.title AS actedInMovie, coActor.name AS coActorName, movie2.title AS coActorActivedInMovie, cruise.name AS coCoActorName; \ No newline at end of file diff --git a/flex/tests/hqps/queries/movie/query2.cypher b/flex/tests/hqps/queries/movie/query2.cypher new file mode 100644 index 000000000000..f5a2260cb74e --- /dev/null +++ b/flex/tests/hqps/queries/movie/query2.cypher @@ -0,0 +1 @@ +MATCH (cloudAtlas:Movie {title: "Cloud Atlas"}) RETURN cloudAtlas.tagline AS tagline, cloudAtlas.released AS releasedYear,cloudAtlas.title AS title; \ No newline at end of file diff --git a/flex/tests/hqps/queries/movie/query3.cypher b/flex/tests/hqps/queries/movie/query3.cypher new file mode 100644 index 000000000000..199dd3678564 --- /dev/null +++ b/flex/tests/hqps/queries/movie/query3.cypher @@ -0,0 +1 @@ +MATCH (people:Person) RETURN people.name LIMIT 10; \ No newline at end of file diff --git a/flex/tests/hqps/queries/movie/query4.cypher b/flex/tests/hqps/queries/movie/query4.cypher new file mode 100644 index 000000000000..5f708cd4c464 --- /dev/null +++ b/flex/tests/hqps/queries/movie/query4.cypher @@ -0,0 +1 @@ +MATCH (nineties:Movie) WHERE nineties.released >= 1990 AND nineties.released < 2000 RETURN nineties.title; \ No newline at end of file diff --git a/flex/tests/hqps/queries/movie/query5.cypher b/flex/tests/hqps/queries/movie/query5.cypher new file mode 100644 index 000000000000..792f2957234f --- /dev/null +++ b/flex/tests/hqps/queries/movie/query5.cypher @@ -0,0 +1,2 @@ +MATCH (tom:Person {name: "Tom Hanks"})-[:ACTED_IN]->(tomHanksMovies) +RETURN tom.born AS bornYear,tomHanksMovies.tagline AS movieTagline, tomHanksMovies.title AS movieTitle, tomHanksMovies.released AS releaseYear; \ No newline at end of file diff --git a/flex/tests/hqps/queries/movie/query6.cypher b/flex/tests/hqps/queries/movie/query6.cypher new file mode 100644 index 000000000000..d7efbdec2ca3 --- /dev/null +++ b/flex/tests/hqps/queries/movie/query6.cypher @@ -0,0 +1,2 @@ +MATCH (cloudAtlas:Movie {title: "Cloud Atlas"})<-[:DIRECTED]-(directors) +RETURN directors.name; \ No newline at end of file diff --git a/flex/tests/hqps/queries/movie/query7.cypher b/flex/tests/hqps/queries/movie/query7.cypher new file mode 100644 index 000000000000..8fe4d19805dc --- /dev/null +++ b/flex/tests/hqps/queries/movie/query7.cypher @@ -0,0 +1,2 @@ +MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors) +RETURN m.title AS movieTitle, m.released AS releasedYear, coActors.name AS coActor \ No newline at end of file diff --git a/flex/tests/hqps/queries/movie/query8.cypher b/flex/tests/hqps/queries/movie/query8.cypher new file mode 100644 index 000000000000..3335a4621dfd --- /dev/null +++ b/flex/tests/hqps/queries/movie/query8.cypher @@ -0,0 +1,2 @@ +MATCH (people:Person)-[relatedTo]-(:Movie {title: "Cloud Atlas"}) +RETURN people.name, type(relatedTo), relatedTo \ No newline at end of file diff --git a/flex/tests/hqps/queries/movie/query9.cypher b/flex/tests/hqps/queries/movie/query9.cypher new file mode 100644 index 000000000000..951cef1edf3c --- /dev/null +++ b/flex/tests/hqps/queries/movie/query9.cypher @@ -0,0 +1,2 @@ +MATCH (bacon:Person {name:"Kevin Bacon"})-[*1..3]-(hollywood) +RETURN DISTINCT bacon, hollywood \ No newline at end of file diff --git a/interactive_engine/compiler/pom.xml b/interactive_engine/compiler/pom.xml index 1af1b5bb93bb..590a7928cccf 100644 --- a/interactive_engine/compiler/pom.xml +++ b/interactive_engine/compiler/pom.xml @@ -253,6 +253,7 @@ **/IrLdbcTest.java **/SimpleMatchTest.java **/IrPatternTest.java + **/MovieTest.java diff --git a/interactive_engine/compiler/src/main/java/com/alibaba/graphscope/cypher/integration/suite/ldbc/MovieQueries.java b/interactive_engine/compiler/src/main/java/com/alibaba/graphscope/cypher/integration/suite/ldbc/MovieQueries.java new file mode 100644 index 000000000000..fcd596889f86 --- /dev/null +++ b/interactive_engine/compiler/src/main/java/com/alibaba/graphscope/cypher/integration/suite/ldbc/MovieQueries.java @@ -0,0 +1,171 @@ +package com.alibaba.graphscope.cypher.integration.suite.ldbc; + +import java.util.Arrays; +import java.util.List; + +public class MovieQueries { + public static QueryContext get_movie_query1_test() { + String query = + "MATCH (tom:Person) WHERE tom.name = \"Tom Hanks\" RETURN tom.born AS" + + " bornYear,tom.name AS personName;"; + List expected = + Arrays.asList("Record<{bornYear: 1956, personName: \"Tom Hanks\"}>"); + return new QueryContext(query, expected); + } + + public static QueryContext get_movie_query2_test() { + String query = + "MATCH (cloudAtlas:Movie {title: \"Cloud Atlas\"}) RETURN cloudAtlas.tagline AS" + + " tagLine, cloudAtlas.release AS releasedYear,cloudAtlas.title AS title;"; + List expected = + Arrays.asList( + "Record<{tagline: \"Everything is connected\", releasedYear: 2012, title:" + + " \"Cloud Atlas\"}>"); + return new QueryContext(query, expected); + } + + public static QueryContext get_movie_query3_test() { + String query = "MATCH (people:Person) RETURN people.name LIMIT 10;"; + List expected = + Arrays.asList( + "Record<{people.name: \"Keanu Reeves\"}>", + "Record<{people.name: \"Carrie-Anne Moss\"}>", + "Record<{people.name: \"Laurence Fishburne\"}>", + "Record<{people.name: \"Hugo Weaving\"}>", + "Record<{people.name: \"Lilly Wachowski\"}>", + "Record<{people.name: \"Lana Wachowski\"}>", + "Record<{people.name: \"Joel Silver\"}>", + "Record<{people.name: \"Emil Eifrem\"}>", + "Record<{people.name: \"Charlize Theron\"}>", + "Record<{people.name: \"Al Pacino\"}>"); + return new QueryContext(query, expected); + } + + public static QueryContext get_movie_query4_test() { + String query = + "MATCH (nineties:Movie) WHERE nineties.released >= 1990 AND nineties.released <" + + " 2000 RETURN nineties.title LIMIT 10;"; + List expected = + Arrays.asList( + "Record<{nineties.title: \"The Matrix\"}>", + "Record<{nineties.title: \"The Devil's Advocate\"}>", + "Record<{nineties.title: \"A Few Good Men\"}>", + "Record<{nineties.title: \"As Good as It Gets\"}>", + "Record<{nineties.title: \"What Dreams May Come\"}>", + "Record<{nineties.title: \"Snow Falling on Cedars\"}>", + "Record<{nineties.title: \"You've Got Mail\"}>", + "Record<{nineties.title: \"Sleepless in Seattle\"}>", + "Record<{nineties.title: \"Joe Versus the Volcano\"}>", + "Record<{nineties.title: \"When Harry Met Sally\"}>"); + return new QueryContext(query, expected); + } + + public static QueryContext get_movie_query5_test() { + String query = + "MATCH (tom:Person {name: \"Tom Hanks\"})-[:ACTED_IN]->(tomHanksMovies)\n" + + "RETURN tom.born AS bornYear, tomHanksMovies.tagline AS movieTagline," + + " tomHanksMovies.title AS movieTitle, tomHanksMovies.released AS" + + " releaseYear;"; + List expected = Arrays.asList(); + return new QueryContext(query, expected); + } + + public static QueryContext get_movie_query6_test() { + String query = + "MATCH (cloudAtlas:Movie {title: \"Cloud Atlas\"})<-[:DIRECTED]-(directors)\n" + + "RETURN directors.name;"; + List expected = Arrays.asList(); + return new QueryContext(query, expected); + } + + public static QueryContext get_movie_query7_test() { + String query = + "MATCH (tom:Person {name:\"Tom Hanks\"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors)\n" + + "RETURN m.title AS movieTitle, m.released AS releasedYear, coActors.name AS" + + " coActor"; + List expected = Arrays.asList(); + return new QueryContext(query, expected); + } + + public static QueryContext get_movie_query8_test() { + String query = + "MATCH (people:Person)-[relatedTo]-(:Movie {title: \"Cloud Atlas\"})\n" + + "RETURN people.name, type(relatedTo), relatedTo"; + List expected = Arrays.asList(); + return new QueryContext(query, expected); + } + + public static QueryContext get_movie_query9_test() { + String query = + "MATCH (bacon:Person {name:\"Kevin Bacon\"})-[*1..3]-(hollywood)\n" + + "RETURN DISTINCT bacon, hollywood"; + List expected = Arrays.asList(); + return new QueryContext(query, expected); + } + + public static QueryContext get_movie_query10_test() { + String query = + "MATCH p=shortestPath(\n" + + " (bacon:Person {name:\"Kevin Bacon\"})-[*]-(meg:Person {name:\"Meg" + + " Ryan\"})\n" + + ")\n" + + "RETURN p;"; + List expected = Arrays.asList(); + return new QueryContext(query, expected); + } + + public static QueryContext get_movie_query11_test() { + String query = + "MATCH (tom:Person {name: 'Tom Hanks'})-[r:ACTED_IN]->(movie:Movie)\n" + + "RETURN tom.id AS personId, movie.title as movieTitle, movie.released as" + + " movieReleased;"; + List expected = Arrays.asList(); + return new QueryContext(query, expected); + } + + public static QueryContext get_movie_query12_test() { + String query = + "MATCH (tom:Person {name: 'Tom" + + " Hanks'})-[:ACTED_IN]->(:Movie)<-[:ACTED_IN]-(coActor:Person)\n" + + "RETURN coActor.name;"; + List expected = Arrays.asList(); + return new QueryContext(query, expected); + } + + public static QueryContext get_movie_query13_test() { + String query = + "MATCH (tom:Person {name: 'Tom" + + " Hanks'})-[:ACTED_IN]->(movie1:Movie)<-[:ACTED_IN]-(coActor:Person)-[:ACTED_IN]->(movie2:Movie)<-[:ACTED_IN]-(coCoActor:Person)\n" + + "WHERE tom <> coCoActor\n" + + "AND NOT (tom)-[:ACTED_IN]->(:Movie)<-[:ACTED_IN]-(coCoActor)\n" + + "RETURN coCoActor.name"; + List expected = Arrays.asList(); + return new QueryContext(query, expected); + } + + public static QueryContext get_movie_query14_test() { + String query = + "MATCH (tom:Person {name: 'Tom" + + " Hanks'})-[:ACTED_IN]->(movie1:Movie)<-[:ACTED_IN]-(coActor:Person)-[:ACTED_IN]->(movie2:Movie)<-[:ACTED_IN]-(coCoActor:Person)\n" + + "WHERE tom <> coCoActor\n" + + "AND NOT (tom)-[:ACTED_IN]->(:Movie)<-[:ACTED_IN]-(coCoActor)\n" + + "RETURN coCoActor.name, count(coCoActor) as frequency\n" + + "ORDER BY frequency DESC\n" + + "LIMIT 5;"; + List expected = Arrays.asList(); + return new QueryContext(query, expected); + } + + public static QueryContext get_movie_query15_test() { + String query = + "MATCH (tom:Person {name: 'Tom" + + " Hanks'})-[:ACTED_IN]->(movie1:Movie)<-[:ACTED_IN]-(coActor:Person)-[:ACTED_IN]->(movie2:Movie)<-[:ACTED_IN]-(cruise:Person" + + " {name: 'Tom Cruise'})\n" + + "WHERE NOT (tom)-[:ACTED_IN]->(:Movie)<-[:ACTED_IN]-(cruise)\n" + + "RETURN tom.name AS actorName, movie1.title AS actedInMovie, coActor.name AS" + + " coActorName, movie2.title AS coActorActivedInMovie, cruise.name AS" + + " coCoActorName;"; + List expected = Arrays.asList(); + return new QueryContext(query, expected); + } +} diff --git a/interactive_engine/compiler/src/test/java/com/alibaba/graphscope/cypher/integration/movie/MovieTest.java b/interactive_engine/compiler/src/test/java/com/alibaba/graphscope/cypher/integration/movie/MovieTest.java new file mode 100644 index 000000000000..96b9dac6e904 --- /dev/null +++ b/interactive_engine/compiler/src/test/java/com/alibaba/graphscope/cypher/integration/movie/MovieTest.java @@ -0,0 +1,115 @@ +package com.alibaba.graphscope.cypher.integration.movie; + +import com.alibaba.graphscope.cypher.integration.suite.ldbc.MovieQueries; +import com.alibaba.graphscope.cypher.integration.suite.ldbc.QueryContext; + +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.neo4j.driver.GraphDatabase; +import org.neo4j.driver.Result; +import org.neo4j.driver.Session; + +public class MovieTest { + + private static Session session; + + @BeforeClass + public static void beforeClass() { + String neo4jServerUrl = + System.getProperty("neo4j.bolt.server.url", "neo4j://localhost:7687"); + session = GraphDatabase.driver(neo4jServerUrl).session(); + } + + @Test + public void run_movie_query1_test() { + QueryContext testQuery = MovieQueries.get_movie_query1_test(); + Result result = session.run(testQuery.getQuery()); + Assert.assertEquals(testQuery.getExpectedResult().toString(), result.list().toString()); + } + + @Test + public void run_movie_query2_test() { + QueryContext testQuery = MovieQueries.get_movie_query2_test(); + Result result = session.run(testQuery.getQuery()); + Assert.assertEquals(testQuery.getExpectedResult().toString(), result.list().toString()); + } + + @Test + public void run_movie_query3_test() { + QueryContext testQuery = MovieQueries.get_movie_query3_test(); + Result result = session.run(testQuery.getQuery()); + Assert.assertEquals(testQuery.getExpectedResult().toString(), result.list().toString()); + } + + @Test + public void run_movie_query4_test() { + QueryContext testQuery = MovieQueries.get_movie_query4_test(); + Result result = session.run(testQuery.getQuery()); + Assert.assertEquals(testQuery.getExpectedResult().toString(), result.list().toString()); + } + + @Test + public void run_movie_query5_test() { + QueryContext testQuery = MovieQueries.get_movie_query5_test(); + Result result = session.run(testQuery.getQuery()); + Assert.assertEquals(testQuery.getExpectedResult().toString(), result.list().toString()); + } + + @Test + public void run_movie_query6_test() { + QueryContext testQuery = MovieQueries.get_movie_query6_test(); + Result result = session.run(testQuery.getQuery()); + Assert.assertEquals(testQuery.getExpectedResult().toString(), result.list().toString()); + } + + @Test + public void run_movie_query7_test() { + QueryContext testQuery = MovieQueries.get_movie_query7_test(); + Result result = session.run(testQuery.getQuery()); + Assert.assertEquals(testQuery.getExpectedResult().toString(), result.list().toString()); + } + + @Test + public void run_movie_query11_test() { + QueryContext testQuery = MovieQueries.get_movie_query11_test(); + Result result = session.run(testQuery.getQuery()); + Assert.assertEquals(testQuery.getExpectedResult().toString(), result.list().toString()); + } + + @Test + public void run_movie_query12_test() { + QueryContext testQuery = MovieQueries.get_movie_query12_test(); + Result result = session.run(testQuery.getQuery()); + Assert.assertEquals(testQuery.getExpectedResult().toString(), result.list().toString()); + } + + @Test + public void run_movie_query13_test() { + QueryContext testQuery = MovieQueries.get_movie_query13_test(); + Result result = session.run(testQuery.getQuery()); + Assert.assertEquals(testQuery.getExpectedResult().toString(), result.list().toString()); + } + + @Test + public void run_movie_query14_test() { + QueryContext testQuery = MovieQueries.get_movie_query14_test(); + Result result = session.run(testQuery.getQuery()); + Assert.assertEquals(testQuery.getExpectedResult().toString(), result.list().toString()); + } + + @Test + public void run_movie_query15_test() { + QueryContext testQuery = MovieQueries.get_movie_query15_test(); + Result result = session.run(testQuery.getQuery()); + Assert.assertEquals(testQuery.getExpectedResult().toString(), result.list().toString()); + } + + @AfterClass + public static void afterClass() { + if (session != null) { + session.close(); + } + } +}