From 7c939a98041f34a1186b75a3593c1a68a9229e3c Mon Sep 17 00:00:00 2001 From: Gemma Lamont Date: Thu, 30 Jan 2025 09:51:24 +0100 Subject: [PATCH] Missing procedures fix --- .../java/apoc/convert/ConvertJsonTest.java | 29 ++++++++++---- .../apoc/convert/PathsToJsonTreeTest.java | 1 + .../export/ImportAndLoadCoreSecurityTest.java | 4 +- .../java/apoc/export/SecurityTestUtil.java | 2 + .../java/apoc/export/arrow/ArrowTest.java | 9 ++++- .../export/arrow/ExportArrowSecurityTest.java | 9 ++++- core/src/test/java/apoc/help/HelpTest.java | 40 ++++++++++++++++--- .../src/test/java/apoc/load/LoadJsonTest.java | 6 +-- core/src/test/java/apoc/map/MapsTest.java | 2 +- core/src/test/java/apoc/text/StringsTest.java | 10 ++--- .../apoc/trigger/TriggerDisabledTest.java | 9 +++-- .../test/java/apoc/trigger/TriggerTest.java | 10 +++-- .../src/test/java/apoc/warmup/WarmupTest.java | 9 +++-- .../java/org/neo4j/test/rule/DbmsRule.java | 14 ++++--- 14 files changed, 115 insertions(+), 39 deletions(-) diff --git a/core/src/test/java/apoc/convert/ConvertJsonTest.java b/core/src/test/java/apoc/convert/ConvertJsonTest.java index af3fa69d4..faf2b3128 100644 --- a/core/src/test/java/apoc/convert/ConvertJsonTest.java +++ b/core/src/test/java/apoc/convert/ConvertJsonTest.java @@ -448,6 +448,7 @@ public void testToTreeIssue1685() { testCall( db, """ + CYPHER 5 MATCH path = (k:Person {name:'Keanu Reeves'})-[*..5]-(x) WITH collect(path) AS paths CALL apoc.convert.toTree(paths) @@ -486,6 +487,7 @@ public void testToTreeIssue2190() { testCall( db, """ + CYPHER 5 MATCH(root:TreeNode) WHERE root.name = "root" MATCH path = (root)-[cl:CHILD*]->(c:TreeNode) WITH path, [r IN relationships(path) | r.order] AS orders @@ -507,9 +509,11 @@ WITH COLLECT(path) AS paths public void testToTree() { testCall( db, - "CREATE p1=(m:Movie {title:'M'})<-[:ACTED_IN {role:'R1'}]-(:Actor {name:'A1'}), " - + " p2 = (m)<-[:ACTED_IN {role:'R2'}]-(:Actor {name:'A2'}) WITH [p1,p2] as paths " - + " CALL apoc.convert.toTree(paths) YIELD value RETURN value", + """ + CYPHER 5 CREATE p1=(m:Movie {title:'M'})<-[:ACTED_IN {role:'R1'}]-(:Actor {name:'A1'}), + p2 = (m)<-[:ACTED_IN {role:'R2'}]-(:Actor {name:'A2'}) WITH [p1,p2] as paths + CALL apoc.convert.toTree(paths) YIELD value RETURN value + """, (row) -> { Map root = (Map) row.get("value"); assertEquals("Movie", root.get("_type")); @@ -526,9 +530,11 @@ public void testToTree() { public void testToTreeUpperCaseRels() { testCall( db, - "CREATE p1=(m:Movie {title:'M'})<-[:ACTED_IN {role:'R1'}]-(:Actor {name:'A1'}), " - + " p2 = (m)<-[:ACTED_IN {role:'R2'}]-(:Actor {name:'A2'}) WITH [p1,p2] as paths " - + " CALL apoc.convert.toTree(paths,false) YIELD value RETURN value", + """ + CYPHER 5 + CREATE p1=(m:Movie {title:'M'})<-[:ACTED_IN {role:'R1'}]-(:Actor {name:'A1'}), + p2 = (m)<-[:ACTED_IN {role:'R2'}]-(:Actor {name:'A2'}) WITH [p1,p2] as paths + CALL apoc.convert.toTree(paths,false) YIELD value RETURN value""", (row) -> { Map root = (Map) row.get("value"); assertEquals("Movie", root.get("_type")); @@ -543,7 +549,7 @@ public void testToTreeUpperCaseRels() { @Test public void testTreeOfEmptyList() { - testCall(db, " CALL apoc.convert.toTree([]) YIELD value RETURN value", (row) -> { + testCall(db, "CYPHER 5 CALL apoc.convert.toTree([]) YIELD value RETURN value", (row) -> { Map root = (Map) row.get("value"); assertTrue(root.isEmpty()); }); @@ -561,6 +567,7 @@ public void testToTreeLeafNodes() { String call = """ + CYPHER 5 MATCH p=(n:Category)-[:subcategory*]->(m) WHERE NOT (m)-[:subcategory]->() AND NOT ()-[:subcategory]->(n) WITH COLLECT(p) AS ps @@ -632,6 +639,7 @@ RETURN r.id as givenId, id(r) as id, elementId(r) as elementId String call = """ + CYPHER 5 MATCH (parent:Bib {id: '57523a6f-fda9-4a61-c4f6-08d47cdcf0cd'}) WITH parent OPTIONAL MATCH childFlagPath=(parent)-[:HAS]->(:Comm)<-[:Flag]-(:User) @@ -747,6 +755,7 @@ public void testToTreeLeafNodesWithConfigInclude() { statementForConfig(db); String call = """ + CYPHER 5 MATCH p=(n:Category)-[:subcategory*]->(m) WHERE NOT (m)-[:subcategory]->() AND NOT ()-[:subcategory]->(n) WITH COLLECT(p) AS ps @@ -778,6 +787,7 @@ public void testToTreeLeafNodesWithConfigExclude() { statementForConfig(db); String call = """ + CYPHER 5 MATCH p=(n:Category)-[:subcategory*]->(m) WHERE NOT (m)-[:subcategory]->() AND NOT ()-[:subcategory]->(n) WITH COLLECT(p) AS ps @@ -809,6 +819,7 @@ public void testToTreeLeafNodesWithConfigExcludeInclude() { statementForConfig(db); String call = """ + CYPHER 5 MATCH p=(n:Category)-[:subcategory*]->(m) WHERE NOT (m)-[:subcategory]->() AND NOT ()-[:subcategory]->(n) WITH COLLECT(p) AS ps @@ -840,6 +851,7 @@ public void testToTreeLeafNodesWithConfigOnlyInclude() { statementForConfig(db); String call = """ + CYPHER 5 MATCH p=(n:Category)-[:subcategory*]->(m) WHERE NOT (m)-[:subcategory]->() AND NOT ()-[:subcategory]->(n) WITH COLLECT(p) AS ps @@ -871,6 +883,7 @@ public void testToTreeLeafNodesWithConfigErrorInclude() { statementForConfig(db); String call = """ + CYPHER 5 MATCH p=(n:Category)-[:subcategory*]->(m) WHERE NOT (m)-[:subcategory]->() AND NOT ()-[:subcategory]->(n) WITH COLLECT(p) AS ps @@ -898,6 +911,7 @@ public void testToTreeDoesNotRemoveNonDuplicateRels() { String query = """ + CYPHER 5 MATCH p1 = (n:N {id:'n21'})-[e1]->(m1:N) WITH COLLECT(p1) as paths CALL apoc.convert.toTree(paths, false) @@ -933,6 +947,7 @@ public void testToTreeLeafNodesWithConfigErrorExclude() { statementForConfig(db); String call = """ + CYPHER 5 MATCH p=(n:Category)-[:subcategory*]->(m) WHERE NOT (m)-[:subcategory]->() AND NOT ()-[:subcategory]->(n) WITH COLLECT(p) AS ps diff --git a/core/src/test/java/apoc/convert/PathsToJsonTreeTest.java b/core/src/test/java/apoc/convert/PathsToJsonTreeTest.java index c537249a3..6da58b897 100644 --- a/core/src/test/java/apoc/convert/PathsToJsonTreeTest.java +++ b/core/src/test/java/apoc/convert/PathsToJsonTreeTest.java @@ -703,6 +703,7 @@ public void testToTreeMultiLabelFiltersForOldProcedure() { var query = """ + CYPHER 5 MATCH path = (n)-[r]->(m) WITH COLLECT(path) AS paths CALL apoc.convert.toTree(paths, true, {nodes: { A: ['-nodeName'] } }) YIELD value AS tree diff --git a/core/src/test/java/apoc/export/ImportAndLoadCoreSecurityTest.java b/core/src/test/java/apoc/export/ImportAndLoadCoreSecurityTest.java index 006880daa..a5df03e84 100644 --- a/core/src/test/java/apoc/export/ImportAndLoadCoreSecurityTest.java +++ b/core/src/test/java/apoc/export/ImportAndLoadCoreSecurityTest.java @@ -21,6 +21,7 @@ import static apoc.export.SecurityTestUtil.ALLOWED_EXCEPTIONS; import static apoc.export.SecurityTestUtil.IMPORT_PROCEDURES; import static apoc.export.SecurityTestUtil.LOAD_PROCEDURES; +import static apoc.export.SecurityTestUtil.cypher5OnlyProcedures; import static apoc.export.SecurityTestUtil.setImportFileApocConfigs; import static apoc.util.FileTestUtil.createTempFolder; import static apoc.util.FileUtils.ACCESS_OUTSIDE_DIR_ERROR; @@ -89,7 +90,8 @@ public class ImportAndLoadCoreSecurityTest { private final String fileName; public ImportAndLoadCoreSecurityTest(String method, String methodArguments, String fileName) { - this.apocProcedure = "CALL " + method + methodArguments; + var cypherVersion = cypher5OnlyProcedures.contains(method) ? "CYPHER 5 " : ""; + this.apocProcedure = cypherVersion + "CALL " + method + methodArguments; this.importMethod = method; this.fileName = fileName; } diff --git a/core/src/test/java/apoc/export/SecurityTestUtil.java b/core/src/test/java/apoc/export/SecurityTestUtil.java index 0dc5e9edb..dc79c0bd8 100644 --- a/core/src/test/java/apoc/export/SecurityTestUtil.java +++ b/core/src/test/java/apoc/export/SecurityTestUtil.java @@ -79,6 +79,8 @@ public class SecurityTestUtil { Pair.of("xml", "($fileName, '', {}, false)"), Pair.of("arrow", "($fileName)")); + public static List cypher5OnlyProcedures = List.of("apoc.load.arrow", "apoc.load.jsonParams"); + public static void assertPathTraversalError( GraphDatabaseService db, String query, Map params, Consumer exceptionConsumer) { diff --git a/core/src/test/java/apoc/export/arrow/ArrowTest.java b/core/src/test/java/apoc/export/arrow/ArrowTest.java index 964f4374d..417053abb 100644 --- a/core/src/test/java/apoc/export/arrow/ArrowTest.java +++ b/core/src/test/java/apoc/export/arrow/ArrowTest.java @@ -43,11 +43,15 @@ import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Test; +import org.neo4j.configuration.GraphDatabaseInternalSettings; import org.neo4j.configuration.GraphDatabaseSettings; import org.neo4j.graphdb.Result; import org.neo4j.test.rule.DbmsRule; import org.neo4j.test.rule.ImpermanentDbmsRule; +/** + * CYPHER 5 only; moved to extended for Cypher 25 + */ public class ArrowTest { private static File directory = new File("target/arrow import"); @@ -60,7 +64,10 @@ public class ArrowTest { public static DbmsRule db = new ImpermanentDbmsRule() .withSetting( GraphDatabaseSettings.load_csv_file_url_root, - directory.toPath().toAbsolutePath()); + directory.toPath().toAbsolutePath()) + .withSetting( + GraphDatabaseInternalSettings.default_cypher_version, + GraphDatabaseInternalSettings.CypherVersion.Cypher5); public static final List> EXPECTED = List.of( new HashMap<>() { diff --git a/core/src/test/java/apoc/export/arrow/ExportArrowSecurityTest.java b/core/src/test/java/apoc/export/arrow/ExportArrowSecurityTest.java index b1457a36f..d0fef4276 100644 --- a/core/src/test/java/apoc/export/arrow/ExportArrowSecurityTest.java +++ b/core/src/test/java/apoc/export/arrow/ExportArrowSecurityTest.java @@ -54,11 +54,15 @@ import org.junit.experimental.runners.Enclosed; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; +import org.neo4j.configuration.GraphDatabaseInternalSettings; import org.neo4j.configuration.GraphDatabaseSettings; import org.neo4j.graphdb.QueryExecutionException; import org.neo4j.test.rule.DbmsRule; import org.neo4j.test.rule.ImpermanentDbmsRule; +/** + * CYPHER 5 only; moved to extended for Cypher 25 + */ @RunWith(Enclosed.class) public class ExportArrowSecurityTest { public static final File directory = new File("target/import"); @@ -84,7 +88,10 @@ public class ExportArrowSecurityTest { public static DbmsRule db = new ImpermanentDbmsRule() .withSetting( GraphDatabaseSettings.load_csv_file_url_root, - directory.toPath().toAbsolutePath()); + directory.toPath().toAbsolutePath()) + .withSetting( + GraphDatabaseInternalSettings.default_cypher_version, + GraphDatabaseInternalSettings.CypherVersion.Cypher5); @BeforeClass public static void setUp() { diff --git a/core/src/test/java/apoc/help/HelpTest.java b/core/src/test/java/apoc/help/HelpTest.java index d7fa445c6..c3146fa9f 100644 --- a/core/src/test/java/apoc/help/HelpTest.java +++ b/core/src/test/java/apoc/help/HelpTest.java @@ -55,8 +55,8 @@ public void teardown() { } @Test - public void info() { - TestUtil.testCall(db, "CALL apoc.help($text)", map("text", "bitwise"), (row) -> { + public void infoCypher5() { + TestUtil.testCall(db, "CYPHER 5 CALL apoc.help($text)", map("text", "bitwise"), (row) -> { assertEquals("function", row.get("type")); assertEquals("apoc.bitwise.op", row.get("name")); assertTrue(((String) row.get("text")).contains("bitwise operation")); @@ -64,23 +64,23 @@ public void info() { }); TestUtil.testCall( db, - "CALL apoc.help($text)", + "CYPHER 5 CALL apoc.help($text)", map("text", "operation+"), (row) -> assertEquals("apoc.bitwise.op", row.get("name"))); - TestUtil.testCall(db, "CALL apoc.help($text)", map("text", "toSet"), (row) -> { + TestUtil.testCall(db, "CYPHER 5 CALL apoc.help($text)", map("text", "toSet"), (row) -> { assertEquals("function", row.get("type")); assertEquals("apoc.coll.toSet", row.get("name")); assertTrue(((String) row.get("text")).contains("unique `LIST`")); assertFalse(((Boolean) row.get("isDeprecated"))); }); - TestUtil.testCall(db, "CALL apoc.help($text)", map("text", "diff.nodes"), (row) -> { + TestUtil.testCall(db, "CYPHER 5 CALL apoc.help($text)", map("text", "diff.nodes"), (row) -> { assertEquals("function", row.get("type")); assertEquals("apoc.diff.nodes", row.get("name")); assertTrue(((String) row.get("text")) .contains("Returns a `MAP` detailing the differences between the two given `NODE` values.")); assertFalse(((Boolean) row.get("isDeprecated"))); }); - TestUtil.testCall(db, "CALL apoc.help($text)", map("text", "apoc.create.uuids"), (row) -> { + TestUtil.testCall(db, "CYPHER 5 CALL apoc.help($text)", map("text", "apoc.create.uuids"), (row) -> { assertEquals("procedure", row.get("type")); assertEquals("apoc.create.uuids", row.get("name")); assertTrue(((String) row.get("text")).contains("Returns a stream of UUIDs.")); @@ -88,6 +88,34 @@ public void info() { }); } + @Test + public void infoCypher25() { + TestUtil.testCall(db, "CYPHER 25 CALL apoc.help($text)", map("text", "bitwise"), (row) -> { + assertEquals("function", row.get("type")); + assertEquals("apoc.bitwise.op", row.get("name")); + assertTrue(((String) row.get("text")).contains("bitwise operation")); + assertFalse(((Boolean) row.get("isDeprecated"))); + }); + TestUtil.testCall( + db, + "CYPHER 25 CALL apoc.help($text)", + map("text", "operation+"), + (row) -> assertEquals("apoc.bitwise.op", row.get("name"))); + TestUtil.testCall(db, "CYPHER 25 CALL apoc.help($text)", map("text", "toSet"), (row) -> { + assertEquals("function", row.get("type")); + assertEquals("apoc.coll.toSet", row.get("name")); + assertTrue(((String) row.get("text")).contains("unique `LIST`")); + assertFalse(((Boolean) row.get("isDeprecated"))); + }); + TestUtil.testCall(db, "CYPHER 25 CALL apoc.help($text)", map("text", "diff.nodes"), (row) -> { + assertEquals("function", row.get("type")); + assertEquals("apoc.diff.nodes", row.get("name")); + assertTrue(((String) row.get("text")) + .contains("Returns a `MAP` detailing the differences between the two given `NODE` values.")); + assertFalse(((Boolean) row.get("isDeprecated"))); + }); + } + @Test public void indicateCore() { TestUtil.testCall( diff --git a/core/src/test/java/apoc/load/LoadJsonTest.java b/core/src/test/java/apoc/load/LoadJsonTest.java index 83d6e51b0..30589295f 100644 --- a/core/src/test/java/apoc/load/LoadJsonTest.java +++ b/core/src/test/java/apoc/load/LoadJsonTest.java @@ -119,7 +119,7 @@ public void testLoadJson() { public void testLoadMultiJsonWithBinary() { testResult( db, - "CALL apoc.load.jsonParams($url, null, null, null, $config)", + "CYPHER 5 CALL apoc.load.jsonParams($url, null, null, null, $config)", map( "url", fileToBinary( @@ -441,7 +441,7 @@ public void testLoadJsonParamsWithAuth() throws Exception { testCall( db, - "call apoc.load.jsonParams($url, $config, $payload)", + "CYPHER 5 CALL apoc.load.jsonParams($url, $config, $payload)", map( "payload", "{\"query\":\"pagecache\",\"version\":\"3.5\"}", @@ -471,7 +471,7 @@ public void testLoadJsonParams() { testCall( db, - "call apoc.load.jsonParams($url, $config, $json)", + "CYPHER 5 CALL apoc.load.jsonParams($url, $config, $json)", map( "json", "{\"query\":\"pagecache\",\"version\":\"3.5\"}", diff --git a/core/src/test/java/apoc/map/MapsTest.java b/core/src/test/java/apoc/map/MapsTest.java index f265b6862..b44eb1f3d 100644 --- a/core/src/test/java/apoc/map/MapsTest.java +++ b/core/src/test/java/apoc/map/MapsTest.java @@ -217,7 +217,7 @@ public void testSetKey() { @Test public void testSetEntry() { - TestUtil.testCall(db, "RETURN apoc.map.setEntry({a:1},'a',2) AS value", (r) -> { + TestUtil.testCall(db, "CYPHER 5 RETURN apoc.map.setEntry({a:1},'a',2) AS value", (r) -> { assertEquals(map("a", 2L), r.get("value")); }); } diff --git a/core/src/test/java/apoc/text/StringsTest.java b/core/src/test/java/apoc/text/StringsTest.java index f1dfaa4ff..c5e207abb 100644 --- a/core/src/test/java/apoc/text/StringsTest.java +++ b/core/src/test/java/apoc/text/StringsTest.java @@ -157,7 +157,7 @@ public void testReplace() { testCall( db, - "RETURN apoc.text.regreplace($text,$regex,$replacement) AS value", + "CYPHER 5 RETURN apoc.text.regreplace($text,$regex,$replacement) AS value", map("text", text, "regex", regex, "replacement", replacement), row -> assertEquals(expected, row.get("value"))); } @@ -169,17 +169,17 @@ public void testReplaceAllWithNull() { String replacement = ""; testCall( db, - "RETURN apoc.text.regreplace($text,$regex,$replacement) AS value", + "CYPHER 5 RETURN apoc.text.regreplace($text,$regex,$replacement) AS value", map("text", null, "regex", regex, "replacement", replacement), row -> assertEquals(null, row.get("value"))); testCall( db, - "RETURN apoc.text.regreplace($text,$regex,$replacement) AS value", + "CYPHER 5 RETURN apoc.text.regreplace($text,$regex,$replacement) AS value", map("text", text, "regex", null, "replacement", replacement), row -> assertEquals(null, row.get("value"))); testCall( db, - "RETURN apoc.text.regreplace($text,$regex,$replacement) AS value", + "CYPHER 5 RETURN apoc.text.regreplace($text,$regex,$replacement) AS value", map("text", text, "regex", regex, "replacement", null), row -> assertEquals(null, row.get("value"))); } @@ -397,7 +397,7 @@ public void testFuzzyMatchIntegration() { public void testDocReplace() { testCall( db, - "RETURN apoc.text.regreplace('Hello World!', '[^a-zA-Z]', '') AS value", + "CYPHER 5 RETURN apoc.text.regreplace('Hello World!', '[^a-zA-Z]', '') AS value", row -> assertEquals("HelloWorld", row.get("value"))); } diff --git a/core/src/test/java/apoc/trigger/TriggerDisabledTest.java b/core/src/test/java/apoc/trigger/TriggerDisabledTest.java index ea6953c87..229d93965 100644 --- a/core/src/test/java/apoc/trigger/TriggerDisabledTest.java +++ b/core/src/test/java/apoc/trigger/TriggerDisabledTest.java @@ -29,13 +29,13 @@ import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.Test; +import org.neo4j.configuration.GraphDatabaseInternalSettings; import org.neo4j.graphdb.Result; import org.neo4j.test.rule.DbmsRule; import org.neo4j.test.rule.ImpermanentDbmsRule; /** - * @author alexiudice - * @since 14.07.18 + * CYPHER 5 only; moved to extended for Cypher 25 *

* Tests for fix of #845. *

@@ -47,7 +47,10 @@ public class TriggerDisabledTest { @ClassRule - public static DbmsRule db = new ImpermanentDbmsRule(); + public static DbmsRule db = new ImpermanentDbmsRule() + .withSetting( + GraphDatabaseInternalSettings.default_cypher_version, + GraphDatabaseInternalSettings.CypherVersion.Cypher5); @BeforeClass public static void setUp() { diff --git a/core/src/test/java/apoc/trigger/TriggerTest.java b/core/src/test/java/apoc/trigger/TriggerTest.java index 1dc1109d6..7695f8190 100644 --- a/core/src/test/java/apoc/trigger/TriggerTest.java +++ b/core/src/test/java/apoc/trigger/TriggerTest.java @@ -38,6 +38,7 @@ import org.junit.Rule; import org.junit.Test; import org.junit.contrib.java.lang.system.ProvideSystemProperty; +import org.neo4j.configuration.GraphDatabaseInternalSettings; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.QueryExecutionException; import org.neo4j.graphdb.Relationship; @@ -49,8 +50,7 @@ import org.neo4j.test.rule.ImpermanentDbmsRule; /** - * @author mh - * @since 20.09.16 + * CYPHER 5 only; moved to extended for Cypher 25 */ public class TriggerTest { @@ -60,7 +60,11 @@ public class TriggerTest { new ProvideSystemProperty(APOC_TRIGGER_ENABLED, String.valueOf(true)); @Rule - public DbmsRule db = new ImpermanentDbmsRule().withSetting(procedure_unrestricted, List.of("apoc*")); + public DbmsRule db = new ImpermanentDbmsRule() + .withSetting(procedure_unrestricted, List.of("apoc*")) + .withSetting( + GraphDatabaseInternalSettings.default_cypher_version, + GraphDatabaseInternalSettings.CypherVersion.Cypher5); private long start; diff --git a/core/src/test/java/apoc/warmup/WarmupTest.java b/core/src/test/java/apoc/warmup/WarmupTest.java index 53f2e488f..880bf28b2 100644 --- a/core/src/test/java/apoc/warmup/WarmupTest.java +++ b/core/src/test/java/apoc/warmup/WarmupTest.java @@ -29,18 +29,21 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.neo4j.configuration.GraphDatabaseInternalSettings; import org.neo4j.configuration.GraphDatabaseSettings; import org.neo4j.test.rule.DbmsRule; import org.neo4j.test.rule.ImpermanentDbmsRule; /** - * @author Sascha Peukert - * @since 06.05.16 + * CYPHER 5 only; moved to extended for Cypher 25 */ public class WarmupTest { @Rule - public DbmsRule db = new ImpermanentDbmsRule(); + public DbmsRule db = new ImpermanentDbmsRule() + .withSetting( + GraphDatabaseInternalSettings.default_cypher_version, + GraphDatabaseInternalSettings.CypherVersion.Cypher5); @Before public void setUp() { diff --git a/test-utils/src/main/java/org/neo4j/test/rule/DbmsRule.java b/test-utils/src/main/java/org/neo4j/test/rule/DbmsRule.java index 0130f0515..507f12b40 100644 --- a/test-utils/src/main/java/org/neo4j/test/rule/DbmsRule.java +++ b/test-utils/src/main/java/org/neo4j/test/rule/DbmsRule.java @@ -157,11 +157,15 @@ private void create() { // Allow experimental versions of Cypher and set Cypher Default Version globalConfig.put(GraphDatabaseInternalSettings.enable_experimental_cypher_versions, true); - String cypherVersionEnv = System.getenv() - .getOrDefault("CYPHER_VERSION", GraphDatabaseInternalSettings.CypherVersion.Cypher25.name()); - GraphDatabaseInternalSettings.CypherVersion cypherVersion = - GraphDatabaseInternalSettings.CypherVersion.valueOf(cypherVersionEnv); - globalConfig.put(GraphDatabaseInternalSettings.default_cypher_version, cypherVersion); + + // A test may set this for the entire file itself, so we shouldn't override that + if (!globalConfig.containsKey(GraphDatabaseInternalSettings.default_cypher_version)) { + String cypherVersionEnv = System.getenv() + .getOrDefault("CYPHER_VERSION", GraphDatabaseInternalSettings.CypherVersion.Cypher25.name()); + GraphDatabaseInternalSettings.CypherVersion cypherVersion = + GraphDatabaseInternalSettings.CypherVersion.valueOf(cypherVersionEnv); + globalConfig.put(GraphDatabaseInternalSettings.default_cypher_version, cypherVersion); + } databaseBuilder.setConfig(globalConfig); }