diff --git a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/TestEvalJavaScript.java b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/TestEvalJavaScript.java index 798d6c6a9..242e50c1a 100644 --- a/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/TestEvalJavaScript.java +++ b/marklogic-client-api-functionaltests/src/test/java/com/marklogic/client/fastfunctest/TestEvalJavaScript.java @@ -7,6 +7,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.marklogic.client.DatabaseClient; +import com.marklogic.client.MarkLogicVersion; import com.marklogic.client.document.DocumentManager; import com.marklogic.client.document.DocumentWriteSet; import com.marklogic.client.document.TextDocumentManager; @@ -38,7 +39,7 @@ */ @TestMethodOrder(MethodOrderer.MethodName.class) public class TestEvalJavaScript extends AbstractFunctionalTest { - private static String appServerHostname = null; + private String dbName = "java-functest"; private DatabaseClient client; @@ -48,7 +49,6 @@ public static void setUpBeforeClass() throws Exception { TestEvalXquery.createUserRolesWithPrevilages("test-js-eval", "xdbc:eval", "xdbc:eval-in", "xdmp:eval-in", "xdmp:invoke-in", "xdmp:invoke", "xdbc:invoke-in", "any-uri", "xdbc:invoke"); TestEvalXquery.createRESTUser("eval-userJS", "x", "test-js-eval"); - appServerHostname = getRestAppServerHostName(); } @AfterAll @@ -628,10 +628,8 @@ public void testStreamClosingWithEvalAs() throws KeyManagementException, NoSuchA } } - // Making sure that mjs modules can be used in eval. @Test public void testJavaScriptModules() { - System.out.println("Running testJavaScriptModules"); DatabaseClient moduleClient = null; try { String docId[] = { "/test/words/wd1.json", "/test/words/wd2.json", "/test/words/wd3.json", @@ -644,8 +642,11 @@ public void testJavaScriptModules() { " .orderBy('city')" + " .filter()" + " .slice(0, 10)" + - " .result();" + - "export default output;"; + " .result(); "; + + mjsString = MarkLogicVersion.getMarkLogicVersion(client).getMajor() >= 12 ? + mjsString + "export default output;" : + mjsString + "output"; DocumentManager dm = moduleClient.newDocumentManager(); DocumentMetadataHandle metadataHandle = new DocumentMetadataHandle(); diff --git a/marklogic-client-api/src/test/java/com/marklogic/client/test/rows/TransformDocTest.java b/marklogic-client-api/src/test/java/com/marklogic/client/test/rows/TransformDocTest.java index c09c831bb..403a3a8b5 100644 --- a/marklogic-client-api/src/test/java/com/marklogic/client/test/rows/TransformDocTest.java +++ b/marklogic-client-api/src/test/java/com/marklogic/client/test/rows/TransformDocTest.java @@ -10,7 +10,10 @@ import com.marklogic.client.io.marker.AbstractWriteHandle; import com.marklogic.client.row.RowRecord; import com.marklogic.client.test.Common; +import com.marklogic.client.test.MarkLogicVersion; import com.marklogic.client.test.junit5.RequiresML11; +import org.junit.Before; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -24,6 +27,21 @@ @ExtendWith(RequiresML11.class) public class TransformDocTest extends AbstractOpticUpdateTest { + private String transformDocModule; + private String transformMultipleDocsModule; + + @BeforeEach + void beforeEach() { + boolean is12OrHigher = Common.getMarkLogicVersion().getMajor() >= 12; + if (is12OrHigher) { + transformDocModule = "/etc/optic/test/transformDoc-test-12.mjs"; + transformMultipleDocsModule = "/etc/optic/test/transformDoc-multipleRows-12.mjs"; + } else { + transformDocModule = "/etc/optic/test/transformDoc-test.mjs"; + transformMultipleDocsModule = "/etc/optic/test/transformDoc-multipleRows.mjs"; + } + } + @Test public void mjsTransformWithParam() { ArrayNode rows = mapper.createArrayNode(); @@ -32,7 +50,7 @@ public void mjsTransformWithParam() { ModifyPlan plan = op .fromParam("myDocs", "", op.colTypes(op.colType("doc", "none"))) .transformDoc(op.col("doc"), - op.transformDef("/etc/optic/test/transformDoc-test.mjs") + op.transformDef(transformDocModule) .withParam("myParam", "my value")); List results = resultRows(plan.bindParam("myDocs", new JacksonHandle(rows))); @@ -53,7 +71,7 @@ public void mjsTransformWithColParam() { .joinDoc(op.col("doc"), op.col("uri")) .transformDoc( op.col("doc"), - op.transformDef("/etc/optic/test/transformDoc-test.mjs") + op.transformDef(transformDocModule) .withParam("myColumnParam", op.col("uri")) .withParam("myParam", "test value") ); @@ -76,7 +94,7 @@ public void mjsTransformWithQualifiedColParam() { .joinDoc(op.col("doc"), op.viewCol(qualifier, "uri")) .transformDoc( op.col("doc"), - op.transformDef("/etc/optic/test/transformDoc-test.mjs").withParam("myParam", op.viewCol(qualifier, "uri")) + op.transformDef(transformDocModule).withParam("myParam", op.viewCol(qualifier, "uri")) ); List rows = resultRows(plan); @@ -96,7 +114,7 @@ public void mjsTransformWithoutParam() { ModifyPlan plan = op .fromParam("myDocs", "", op.colTypes(op.colType("doc", "none"))) .transformDoc(op.col("doc"), - op.transformDef("/etc/optic/test/transformDoc-test.mjs").withKind("mjs")); + op.transformDef(transformDocModule).withKind("mjs")); List results = resultRows(plan.bindParam("myDocs", new JacksonHandle(rows))); assertEquals(1, results.size()); @@ -113,7 +131,7 @@ public void mjsTransformReturnsMultipleRows() { .fromDocDescriptors( op.docDescriptor(newWriteOp("will-be-replaced", mapper.createObjectNode().put("hello", "there"))) ) - .transformDoc(op.col("doc"), op.transformDef("/etc/optic/test/transformDoc-multipleRows.mjs")) + .transformDoc(op.col("doc"), op.transformDef(transformMultipleDocsModule)) .bind(op.as("uri", op.fn.concat( op.xs.string("/acme/"), op.xdmp.random(), @@ -152,7 +170,7 @@ public void multipleJsonDocs() { .fromDocUris("/optic/test/musician1.json", "/optic/test/musician2.json") .joinDoc(op.col("doc"), op.col("uri")) .transformDoc(op.col("doc"), - op.transformDef("/etc/optic/test/transformDoc-test.mjs").withParam("myParam", + op.transformDef(transformDocModule).withParam("myParam", "my value")); List results = resultRows(plan); diff --git a/marklogic-client-api/src/test/java/com/marklogic/client/test/rows/UpdateUseCasesTest.java b/marklogic-client-api/src/test/java/com/marklogic/client/test/rows/UpdateUseCasesTest.java index d1223d3d4..68b6c0cd6 100644 --- a/marklogic-client-api/src/test/java/com/marklogic/client/test/rows/UpdateUseCasesTest.java +++ b/marklogic-client-api/src/test/java/com/marklogic/client/test/rows/UpdateUseCasesTest.java @@ -12,6 +12,7 @@ import com.marklogic.client.test.Common; import com.marklogic.client.test.junit5.RequiresML11; import com.marklogic.client.type.PlanSystemColumn; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -28,6 +29,15 @@ @ExtendWith(RequiresML11.class) public class UpdateUseCasesTest extends AbstractOpticUpdateTest { + private String transformDocModule; + + @BeforeEach + void beforeEach() { + transformDocModule = Common.getMarkLogicVersion().getMajor() >= 12 ? + "/etc/optic/test/transformDoc-test-12.mjs" : + "/etc/optic/test/transformDoc-test.mjs"; + } + /** * Use case: Given a set of doc descriptors, add a collection to each document with a URI matching one of the * descriptors. Any descriptor that has a URI for a document that no longer exists will be ignored. @@ -177,7 +187,7 @@ public void writeNewDocsFromView() { .lockForUpdate() .transformDoc( op.col("doc"), - op.transformDef("/etc/optic/test/transformDoc-test.mjs") + op.transformDef(transformDocModule) .withParam("myParam", "my value")) .write(); diff --git a/test-app/src/main/ml-modules/root/etc/optic/test/transformDoc-multipleRows-12.mjs b/test-app/src/main/ml-modules/root/etc/optic/test/transformDoc-multipleRows-12.mjs new file mode 100644 index 000000000..384d57f01 --- /dev/null +++ b/test-app/src/main/ml-modules/root/etc/optic/test/transformDoc-multipleRows-12.mjs @@ -0,0 +1,8 @@ +'use strict'; +const doc = external.doc; +const rows = [ + {"number": 1, "theDoc": doc}, + {"number": 2, "theDoc": doc} +]; +const output = Sequence.from(rows); +export default output; diff --git a/test-app/src/main/ml-modules/root/etc/optic/test/transformDoc-multipleRows.mjs b/test-app/src/main/ml-modules/root/etc/optic/test/transformDoc-multipleRows.mjs index 384d57f01..6c07d7feb 100644 --- a/test-app/src/main/ml-modules/root/etc/optic/test/transformDoc-multipleRows.mjs +++ b/test-app/src/main/ml-modules/root/etc/optic/test/transformDoc-multipleRows.mjs @@ -4,5 +4,4 @@ const rows = [ {"number": 1, "theDoc": doc}, {"number": 2, "theDoc": doc} ]; -const output = Sequence.from(rows); -export default output; +Sequence.from(rows) diff --git a/test-app/src/main/ml-modules/root/etc/optic/test/transformDoc-test-12.mjs b/test-app/src/main/ml-modules/root/etc/optic/test/transformDoc-test-12.mjs new file mode 100644 index 000000000..746abbd26 --- /dev/null +++ b/test-app/src/main/ml-modules/root/etc/optic/test/transformDoc-test-12.mjs @@ -0,0 +1,8 @@ +'use strict'; +const result = { + "hello": "world", + "yourParam": external.myParam, + "yourColumnValue": external.myColumnParam, + "theDoc": external.doc +} +export default result; diff --git a/test-app/src/main/ml-modules/root/etc/optic/test/transformDoc-test.mjs b/test-app/src/main/ml-modules/root/etc/optic/test/transformDoc-test.mjs index 746abbd26..1090a429d 100644 --- a/test-app/src/main/ml-modules/root/etc/optic/test/transformDoc-test.mjs +++ b/test-app/src/main/ml-modules/root/etc/optic/test/transformDoc-test.mjs @@ -5,4 +5,4 @@ const result = { "yourColumnValue": external.myColumnParam, "theDoc": external.doc } -export default result; +result;