Skip to content

Making mjs tests work on 11 and 12 #1767

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 8, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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
Expand Down Expand Up @@ -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",
Expand All @@ -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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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();
Expand All @@ -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<RowRecord> results = resultRows(plan.bindParam("myDocs", new JacksonHandle(rows)));
Expand All @@ -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")
);
Expand All @@ -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<RowRecord> rows = resultRows(plan);
Expand All @@ -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<RowRecord> results = resultRows(plan.bindParam("myDocs", new JacksonHandle(rows)));
assertEquals(1, results.size());
Expand All @@ -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(),
Expand Down Expand Up @@ -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<RowRecord> results = resultRows(plan);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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.
Expand Down Expand Up @@ -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();

Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
'use strict';
const result = {
"hello": "world",
"yourParam": external.myParam,
"yourColumnValue": external.myColumnParam,
"theDoc": external.doc
}
export default result;
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ const result = {
"yourColumnValue": external.myColumnParam,
"theDoc": external.doc
}
export default result;
result;