From 01dd8570463f5768f1829792b90d50606b35b88f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20H=C3=BCgel?= Date: Wed, 19 Aug 2026 08:49:01 +0200 Subject: [PATCH 1/4] test: enable Jest ESM execution Run package test scripts with Node VM modules so Jest can evaluate native ESM. Configure ts-jest to treat TypeScript tests as ESM, remove the Babel CommonJS bridge for .mjs dependencies, and keep test type-checking compatible with ESM-only dependency declarations. --- packages/app-runtime/package.json | 29 +++++++------------- packages/app-runtime/test/tsconfig.json | 7 +++-- packages/consumption/package.json | 35 +++++++++---------------- packages/consumption/test/tsconfig.json | 7 +++-- packages/content/package.json | 11 +++++--- packages/content/test/tsconfig.json | 3 +++ packages/core-types/package.json | 11 +++++--- packages/core-types/test/tsconfig.json | 3 +++ packages/runtime/package.json | 35 +++++++++---------------- packages/runtime/test/tsconfig.json | 7 +++-- packages/transport/package.json | 19 ++++++++------ packages/transport/test/tsconfig.json | 5 +++- 12 files changed, 86 insertions(+), 86 deletions(-) diff --git a/packages/app-runtime/package.json b/packages/app-runtime/package.json index c9c5d4786..575265f3b 100644 --- a/packages/app-runtime/package.json +++ b/packages/app-runtime/package.json @@ -21,8 +21,8 @@ "build:notest": "npm run build:node", "cdep": "tsc && depcruise --config ../../.dependency-cruiser.cjs dist", "lint:tsc": "tsc --noEmit && tsc -p test/tsconfig.json --noEmit", - "test": "jest --forceExit", - "test:ci": "jest -i --forceExit --coverage" + "test": "NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest --forceExit", + "test:ci": "NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest -i --forceExit --coverage" }, "jest": { "collectCoverageFrom": [ @@ -35,7 +35,9 @@ "lcov" ], "maxWorkers": 5, - "preset": "ts-jest", + "extensionsToTreatAsEsm": [ + ".ts" + ], "setupFilesAfterEnv": [ "./test/customMatchers.ts", "jest-expect-message", @@ -44,28 +46,17 @@ "testEnvironment": "node", "testTimeout": 60000, "transform": { - "^.+\\.(t|j)s$": [ + "^.+\\.ts$": [ "ts-jest", { - "tsconfig": "test/tsconfig.json" - } - ], - "^.+\\.mjs$": [ - "babel-jest", - { - "presets": [ - [ - "@babel/preset-env", - { - "modules": "commonjs" - } - ] - ] + "tsconfig": "test/tsconfig.json", + "useESM": true } ] }, "moduleNameMapper": { - "^@verifiables/request-converter$": "/../../node_modules/@verifiables/request-converter/dist/index.js" + "^@verifiables/request-converter$": "/../../node_modules/@verifiables/request-converter/dist/index.js", + "^webcrypto-core$": "/../../node_modules/webcrypto-core/build/webcrypto-core.js" }, "transformIgnorePatterns": [ "[/\\\\]packages[/\\\\][^/\\\\]+[/\\\\]dist[/\\\\]", diff --git a/packages/app-runtime/test/tsconfig.json b/packages/app-runtime/test/tsconfig.json index b893d6b91..81d4fcff1 100644 --- a/packages/app-runtime/test/tsconfig.json +++ b/packages/app-runtime/test/tsconfig.json @@ -3,8 +3,11 @@ "compilerOptions": { "noEmit": true, "composite": false, - "allowJs": true, // we want to use the ts compiler to compile ESM node modules into CJS which is understood by jest. This is required since those node modules are javascript. - "types": ["jest", "node"] + "module": "ES2022", + "moduleResolution": "node10", + "ignoreDeprecations": "6.0", + "skipLibCheck": true, + "types": ["jest", "node", "lokijs"] }, "files": ["../../../node_modules/jest-expect-message/types/index.d.ts"], "include": ["**/*.ts", "../src/**/*.ts"], diff --git a/packages/consumption/package.json b/packages/consumption/package.json index f004bea7a..7020e81d1 100644 --- a/packages/consumption/package.json +++ b/packages/consumption/package.json @@ -22,11 +22,11 @@ "cdep": "tsc && depcruise --config ../../.dependency-cruiser.cjs dist", "lint:tsc": "tsc --noEmit && tsc -p test/tsconfig.json --noEmit", "test:ci": "npm run test", - "test:ci:lokijs": "USE_LOKIJS=true jest -i --coverage", - "test:ci:mongodb": "jest -i", - "test:local:ferretdb": "npm run test:local:start:ferretdb && CONNECTION_STRING='mongodb://root:example@localhost:27022' jest", - "test:local:lokijs": "USE_LOKIJS=true jest", - "test:local:mongodb": "npm run test:local:start:mongodb && CONNECTION_STRING='mongodb://root:example@localhost:27021' jest", + "test:ci:lokijs": "USE_LOKIJS=true NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest -i --coverage", + "test:ci:mongodb": "NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest -i", + "test:local:ferretdb": "npm run test:local:start:ferretdb && CONNECTION_STRING='mongodb://root:example@localhost:27022' NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest", + "test:local:lokijs": "USE_LOKIJS=true NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest", + "test:local:mongodb": "npm run test:local:start:mongodb && CONNECTION_STRING='mongodb://root:example@localhost:27021' NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest", "test:local:start:ferretdb": "docker compose -f ../../.dev/compose.yml up -d runtime-ferret", "test:local:start:mongodb": "docker compose -f ../../.dev/compose.yml up -d runtime-mongo", "test:local:teardown": "docker compose -f ../../.dev/compose.yml rm -fsv" @@ -42,7 +42,9 @@ "lcov" ], "maxWorkers": 1, - "preset": "ts-jest", + "extensionsToTreatAsEsm": [ + ".ts" + ], "setupFilesAfterEnv": [ "./test/customMatchers.ts", "jest-expect-message", @@ -51,28 +53,17 @@ "testEnvironment": "node", "testTimeout": 60000, "transform": { - "^.+\\.(t|j)s$": [ + "^.+\\.ts$": [ "ts-jest", { - "tsconfig": "test/tsconfig.json" - } - ], - "^.+\\.mjs$": [ - "babel-jest", - { - "presets": [ - [ - "@babel/preset-env", - { - "modules": "commonjs" - } - ] - ] + "tsconfig": "test/tsconfig.json", + "useESM": true } ] }, "moduleNameMapper": { - "^@verifiables/request-converter$": "/../../node_modules/@verifiables/request-converter/dist/index.js" + "^@verifiables/request-converter$": "/../../node_modules/@verifiables/request-converter/dist/index.js", + "^webcrypto-core$": "/../../node_modules/webcrypto-core/build/webcrypto-core.js" }, "transformIgnorePatterns": [ "[/\\\\]packages[/\\\\][^/\\\\]+[/\\\\]dist[/\\\\]", diff --git a/packages/consumption/test/tsconfig.json b/packages/consumption/test/tsconfig.json index b893d6b91..81d4fcff1 100644 --- a/packages/consumption/test/tsconfig.json +++ b/packages/consumption/test/tsconfig.json @@ -3,8 +3,11 @@ "compilerOptions": { "noEmit": true, "composite": false, - "allowJs": true, // we want to use the ts compiler to compile ESM node modules into CJS which is understood by jest. This is required since those node modules are javascript. - "types": ["jest", "node"] + "module": "ES2022", + "moduleResolution": "node10", + "ignoreDeprecations": "6.0", + "skipLibCheck": true, + "types": ["jest", "node", "lokijs"] }, "files": ["../../../node_modules/jest-expect-message/types/index.d.ts"], "include": ["**/*.ts", "../src/**/*.ts"], diff --git a/packages/content/package.json b/packages/content/package.json index 647c39a16..8f2a362d2 100644 --- a/packages/content/package.json +++ b/packages/content/package.json @@ -21,8 +21,8 @@ "build:notest": "npm run build:node", "cdep": "tsc && depcruise --config ../../.dependency-cruiser.cjs dist", "lint:tsc": "tsc --noEmit && tsc -p test/tsconfig.json --noEmit", - "test": "jest", - "test:ci": "jest -i --coverage" + "test": "NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest", + "test:ci": "NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest -i --coverage" }, "jest": { "collectCoverageFrom": [ @@ -35,7 +35,9 @@ "lcov" ], "maxWorkers": 5, - "preset": "ts-jest", + "extensionsToTreatAsEsm": [ + ".ts" + ], "setupFilesAfterEnv": [ "jest-expect-message", "../../jest.setup.cjs" @@ -46,7 +48,8 @@ "^.+\\.ts$": [ "ts-jest", { - "tsconfig": "test/tsconfig.json" + "tsconfig": "test/tsconfig.json", + "useESM": true } ] } diff --git a/packages/content/test/tsconfig.json b/packages/content/test/tsconfig.json index 067a4c5b4..71b5b3942 100644 --- a/packages/content/test/tsconfig.json +++ b/packages/content/test/tsconfig.json @@ -3,6 +3,9 @@ "compilerOptions": { "noEmit": true, "composite": false, + "module": "ES2022", + "moduleResolution": "node10", + "ignoreDeprecations": "6.0", "types": ["jest", "node"] }, "files": ["../../../node_modules/jest-expect-message/types/index.d.ts"], diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 30df1c19a..25e9a614f 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -19,8 +19,8 @@ "build:ci": "tsc", "cdep": "tsc && depcruise --config ../../.dependency-cruiser.cjs dist", "lint:tsc": "tsc --noEmit && tsc -p test/tsconfig.json --noEmit", - "test": "jest -i", - "test:ci": "jest -i --coverage" + "test": "NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest -i", + "test:ci": "NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest -i --coverage" }, "jest": { "collectCoverageFrom": [ @@ -33,7 +33,9 @@ "lcov" ], "maxWorkers": 1, - "preset": "ts-jest", + "extensionsToTreatAsEsm": [ + ".ts" + ], "setupFilesAfterEnv": [ "jest-expect-message", "../../jest.setup.cjs" @@ -44,7 +46,8 @@ "^.+\\.ts$": [ "ts-jest", { - "tsconfig": "test/tsconfig.json" + "tsconfig": "test/tsconfig.json", + "useESM": true } ] } diff --git a/packages/core-types/test/tsconfig.json b/packages/core-types/test/tsconfig.json index 067a4c5b4..71b5b3942 100644 --- a/packages/core-types/test/tsconfig.json +++ b/packages/core-types/test/tsconfig.json @@ -3,6 +3,9 @@ "compilerOptions": { "noEmit": true, "composite": false, + "module": "ES2022", + "moduleResolution": "node10", + "ignoreDeprecations": "6.0", "types": ["jest", "node"] }, "files": ["../../../node_modules/jest-expect-message/types/index.d.ts"], diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 103a2f07d..53f8a4b8d 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -22,11 +22,11 @@ "build:schemas": "node scripts/buildSchemas.mjs", "cdep": "tsc && depcruise --config ../../.dependency-cruiser.cjs dist", "lint:tsc": "tsc --noEmit && tsc -p test/tsconfig.json --noEmit", - "test:ci:lokijs": "USE_LOKIJS=true jest -i --coverage", - "test:ci:mongodb": "jest -i --coverage", - "test:local:ferretdb": "npm run test:local:start:ferretdb && CONNECTION_STRING='mongodb://root:example@localhost:27022' jest", - "test:local:lokijs": "USE_LOKIJS=true jest", - "test:local:mongodb": "npm run test:local:start:mongodb && CONNECTION_STRING='mongodb://root:example@localhost:27021' jest", + "test:ci:lokijs": "USE_LOKIJS=true NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest -i --coverage", + "test:ci:mongodb": "NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest -i --coverage", + "test:local:ferretdb": "npm run test:local:start:ferretdb && CONNECTION_STRING='mongodb://root:example@localhost:27022' NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest", + "test:local:lokijs": "USE_LOKIJS=true NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest", + "test:local:mongodb": "npm run test:local:start:mongodb && CONNECTION_STRING='mongodb://root:example@localhost:27021' NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest", "test:local:start:ferretdb": "docker compose -f ../../.dev/compose.yml up -d runtime-ferret", "test:local:start:mongodb": "docker compose -f ../../.dev/compose.yml up -d runtime-mongo", "test:local:teardown": "docker compose -f ../../.dev/compose.yml rm -fsv" @@ -42,7 +42,9 @@ "lcov" ], "maxWorkers": 1, - "preset": "ts-jest", + "extensionsToTreatAsEsm": [ + ".ts" + ], "setupFilesAfterEnv": [ "./test/customMatchers.ts", "./test/disableTimeoutForDebugging.ts", @@ -52,28 +54,17 @@ "testEnvironment": "node", "testTimeout": 60000, "transform": { - "^.+\\.(t|j)s$": [ + "^.+\\.ts$": [ "ts-jest", { - "tsconfig": "test/tsconfig.json" - } - ], - "^.+\\.mjs$": [ - "babel-jest", - { - "presets": [ - [ - "@babel/preset-env", - { - "modules": "commonjs" - } - ] - ] + "tsconfig": "test/tsconfig.json", + "useESM": true } ] }, "moduleNameMapper": { - "^@verifiables/request-converter$": "/../../node_modules/@verifiables/request-converter/dist/index.js" + "^@verifiables/request-converter$": "/../../node_modules/@verifiables/request-converter/dist/index.js", + "^webcrypto-core$": "/../../node_modules/webcrypto-core/build/webcrypto-core.js" }, "transformIgnorePatterns": [ "[/\\\\]packages[/\\\\][^/\\\\]+[/\\\\]dist[/\\\\]", diff --git a/packages/runtime/test/tsconfig.json b/packages/runtime/test/tsconfig.json index b893d6b91..81d4fcff1 100644 --- a/packages/runtime/test/tsconfig.json +++ b/packages/runtime/test/tsconfig.json @@ -3,8 +3,11 @@ "compilerOptions": { "noEmit": true, "composite": false, - "allowJs": true, // we want to use the ts compiler to compile ESM node modules into CJS which is understood by jest. This is required since those node modules are javascript. - "types": ["jest", "node"] + "module": "ES2022", + "moduleResolution": "node10", + "ignoreDeprecations": "6.0", + "skipLibCheck": true, + "types": ["jest", "node", "lokijs"] }, "files": ["../../../node_modules/jest-expect-message/types/index.d.ts"], "include": ["**/*.ts", "../src/**/*.ts"], diff --git a/packages/transport/package.json b/packages/transport/package.json index db9258ce0..044f5d73a 100644 --- a/packages/transport/package.json +++ b/packages/transport/package.json @@ -22,15 +22,15 @@ "cdep": "tsc && depcruise --config ../../.dependency-cruiser.cjs dist", "lint:tsc": "tsc --noEmit && tsc -p test/tsconfig.json --noEmit", "test:ci": "npm run test:ci:lokijs && npm run test:ci:mongodb", - "test:ci:lokijs": "USE_LOKIJS=true jest -i --coverage", - "test:ci:mongodb": "jest -i", - "test:local:ferretdb": "npm run test:local:start:ferretdb && CONNECTION_STRING='mongodb://root:example@localhost:27022' jest", - "test:local:lokijs": "USE_LOKIJS=true jest", - "test:local:mongodb": "npm run test:local:start:mongodb && CONNECTION_STRING='mongodb://root:example@localhost:27021' jest", + "test:ci:lokijs": "USE_LOKIJS=true NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest -i --coverage", + "test:ci:mongodb": "NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest -i", + "test:local:ferretdb": "npm run test:local:start:ferretdb && CONNECTION_STRING='mongodb://root:example@localhost:27022' NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest", + "test:local:lokijs": "USE_LOKIJS=true NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest", + "test:local:mongodb": "npm run test:local:start:mongodb && CONNECTION_STRING='mongodb://root:example@localhost:27021' NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest", "test:local:start:ferretdb": "docker compose -f ../../.dev/compose.yml up -d runtime-ferret", "test:local:start:mongodb": "docker compose -f ../../.dev/compose.yml up -d runtime-mongo", "test:local:teardown": "docker compose -f ../../.dev/compose.yml rm -fsv", - "test:mongodb": "jest", + "test:mongodb": "NODE_OPTIONS=\"$NODE_OPTIONS --experimental-vm-modules\" jest", "test:performance:kube:start": "kubectl apply -f ./test/performance/k8s.yaml", "test:performance:kube:stop": "kubectl delete -f ./test/performance/k8s.yaml" }, @@ -45,7 +45,9 @@ "lcov" ], "maxWorkers": 5, - "preset": "ts-jest", + "extensionsToTreatAsEsm": [ + ".ts" + ], "setupFilesAfterEnv": [ "./test/customMatchers.ts", "jest-expect-message", @@ -61,7 +63,8 @@ "^.+\\.ts$": [ "ts-jest", { - "tsconfig": "test/tsconfig.json" + "tsconfig": "test/tsconfig.json", + "useESM": true } ] } diff --git a/packages/transport/test/tsconfig.json b/packages/transport/test/tsconfig.json index 067a4c5b4..704a5334b 100644 --- a/packages/transport/test/tsconfig.json +++ b/packages/transport/test/tsconfig.json @@ -3,7 +3,10 @@ "compilerOptions": { "noEmit": true, "composite": false, - "types": ["jest", "node"] + "module": "ES2022", + "moduleResolution": "node10", + "ignoreDeprecations": "6.0", + "types": ["jest", "node", "lokijs"] }, "files": ["../../../node_modules/jest-expect-message/types/index.d.ts"], "include": ["**/*.ts", "../src/**/*.ts"], From e873c8ab2129fc7de504cac4c21a0b45f8db823d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20H=C3=BCgel?= Date: Wed, 19 Aug 2026 08:49:28 +0200 Subject: [PATCH 2/4] test: make Jest helpers ESM-compatible Import the Jest API from @jest/globals where tests call jest.* directly. Replace CommonJS __dirname usage in test helpers and asset reads with import.meta.url based file paths. --- packages/app-runtime/test/lib/TestUtil.ts | 6 +++--- packages/runtime/test/disableTimeoutForDebugging.ts | 2 ++ packages/runtime/test/lib/testUtils.ts | 3 ++- packages/runtime/test/transport/files.test.ts | 5 +++-- .../transport/test/modules/files/FileController.test.ts | 1 + packages/transport/test/testHelpers/TestUtil.ts | 6 +++--- 6 files changed, 14 insertions(+), 9 deletions(-) diff --git a/packages/app-runtime/test/lib/TestUtil.ts b/packages/app-runtime/test/lib/TestUtil.ts index eb7c46ce2..92e4ec4c8 100644 --- a/packages/app-runtime/test/lib/TestUtil.ts +++ b/packages/app-runtime/test/lib/TestUtil.ts @@ -18,8 +18,8 @@ import { IConfigOverwrite } from "@nmshd/transport"; import fs from "fs"; import { defaultsDeep } from "lodash"; import loki from "lokijs"; -import path from "path"; import { GenericContainer, Wait } from "testcontainers"; +import { fileURLToPath } from "url"; import { AppConfig, AppConfigOverwrite, @@ -303,7 +303,7 @@ export class TestUtil { public static async runDeletionJob(): Promise { const backboneVersion = this.getBackboneVersion(); - const appsettingsOverrideLocation = process.env.APPSETTINGS_OVERRIDE_LOCATION ?? `${__dirname}/../../../../.dev/appsettings.override.json`; + const appsettingsOverrideLocation = process.env.APPSETTINGS_OVERRIDE_LOCATION ?? fileURLToPath(new URL("../../../../.dev/appsettings.override.json", import.meta.url)); const backboneNetwork = process.env.BACKBONE_NETWORK ?? "local-test-backbone"; await new GenericContainer(`ghcr.io/nmshd/backbone-identity-deletion-jobs:${backboneVersion}`) @@ -317,7 +317,7 @@ export class TestUtil { private static getBackboneVersion() { if (process.env.BACKBONE_VERSION) return process.env.BACKBONE_VERSION; - const composeFile = fs.readFileSync(path.resolve(`${__dirname}/../../../../.dev/compose.backbone.yml`)); + const composeFile = fs.readFileSync(fileURLToPath(new URL("../../../../.dev/compose.backbone.yml", import.meta.url))); const regex = /image: ghcr\.io\/nmshd\/backbone-consumer-api:(?[^\r\n]*)@.*/; const match = composeFile.toString().match(regex); diff --git a/packages/runtime/test/disableTimeoutForDebugging.ts b/packages/runtime/test/disableTimeoutForDebugging.ts index 16e586d14..9a6a4abad 100644 --- a/packages/runtime/test/disableTimeoutForDebugging.ts +++ b/packages/runtime/test/disableTimeoutForDebugging.ts @@ -1,3 +1,5 @@ +import { jest } from "@jest/globals"; + /* Disable timeout errors if we're debugging */ if (process.env.NODE_OPTIONS !== undefined && process.env.NODE_OPTIONS.search("inspect") !== -1) { jest.setTimeout(1e9); diff --git a/packages/runtime/test/lib/testUtils.ts b/packages/runtime/test/lib/testUtils.ts index 664cf3bec..edcf65032 100644 --- a/packages/runtime/test/lib/testUtils.ts +++ b/packages/runtime/test/lib/testUtils.ts @@ -33,6 +33,7 @@ import { IdentityUtil, SynchronizedCollection } from "@nmshd/transport"; import fs from "fs"; import _ from "lodash"; import { DateTime } from "luxon"; +import { fileURLToPath } from "url"; import { AttributeSucceededEvent, ConsumptionServices, @@ -204,7 +205,7 @@ export async function makeUploadRequest(values: object = {}): Promise { }); test("can upload same file twice", async () => { - const request = await makeUploadRequest({ content: await fs.promises.readFile(`${__dirname}/../__assets__/test.txt`) }); + const request = await makeUploadRequest({ content: await fs.promises.readFile(fileURLToPath(new URL("../__assets__/test.txt", import.meta.url))) }); const response1 = await transportServices1.files.uploadOwnFile(request); const response2 = await transportServices1.files.uploadOwnFile(request); @@ -203,7 +204,7 @@ describe("Get file", () => { describe("Upload big files", () => { test("can not upload a file that is bigger than 10MB", async () => { - const file = await fs.promises.readFile(`${__dirname}/../__assets__/upload-10+mb.bin`); + const file = await fs.promises.readFile(fileURLToPath(new URL("../__assets__/upload-10+mb.bin", import.meta.url))); const response = await transportServices1.files.uploadOwnFile(await makeUploadRequest({ content: file })); expect(response).toBeAnError("'content' is too large", "error.runtime.validation.invalidPropertyValue"); diff --git a/packages/transport/test/modules/files/FileController.test.ts b/packages/transport/test/modules/files/FileController.test.ts index f086d2600..175e020cc 100644 --- a/packages/transport/test/modules/files/FileController.test.ts +++ b/packages/transport/test/modules/files/FileController.test.ts @@ -1,4 +1,5 @@ import { IDatabaseConnection } from "@js-soft/docdb-access-abstractions"; +import { jest } from "@jest/globals"; import { CoreDate, CoreId } from "@nmshd/core-types"; import { CoreBuffer } from "@nmshd/crypto"; import { AccountController, File, FileOwnershipLockedEvent, Transport } from "../../../src"; diff --git a/packages/transport/test/testHelpers/TestUtil.ts b/packages/transport/test/testHelpers/TestUtil.ts index 8e657413b..902688eef 100644 --- a/packages/transport/test/testHelpers/TestUtil.ts +++ b/packages/transport/test/testHelpers/TestUtil.ts @@ -9,8 +9,8 @@ import { CoreAddress, CoreDate, CoreId } from "@nmshd/core-types"; import { CoreBuffer } from "@nmshd/crypto"; import fs from "fs"; import { DurationLike } from "luxon"; -import path from "path"; import { GenericContainer, Wait } from "testcontainers"; +import { fileURLToPath } from "url"; import { AccountController, ChangedItems, @@ -650,7 +650,7 @@ export class TestUtil { public static async runDeletionJob(): Promise { const backboneVersion = this.getBackboneVersion(); - const appsettingsOverrideLocation = process.env.APPSETTINGS_OVERRIDE_LOCATION ?? `${__dirname}/../../../../.dev/appsettings.override.json`; + const appsettingsOverrideLocation = process.env.APPSETTINGS_OVERRIDE_LOCATION ?? fileURLToPath(new URL("../../../../.dev/appsettings.override.json", import.meta.url)); const backboneNetwork = process.env.BACKBONE_NETWORK ?? "local-test-backbone"; await new GenericContainer(`ghcr.io/nmshd/backbone-identity-deletion-jobs:${backboneVersion}`) @@ -664,7 +664,7 @@ export class TestUtil { private static getBackboneVersion() { if (process.env.BACKBONE_VERSION) return process.env.BACKBONE_VERSION; - const composeFile = fs.readFileSync(path.resolve(`${__dirname}/../../../../.dev/compose.backbone.yml`)); + const composeFile = fs.readFileSync(fileURLToPath(new URL("../../../../.dev/compose.backbone.yml", import.meta.url))); const regex = /image: ghcr\.io\/nmshd\/backbone-consumer-api:(?[^\r\n]*)@.*/; const match = composeFile.toString().match(regex); From de6f2d6cb5683a610f14f99fa44e22b4cafb3e98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20H=C3=BCgel?= Date: Wed, 19 Aug 2026 13:53:18 +0200 Subject: [PATCH 3/4] test: simplify ESM test tsconfigs Let test tsconfigs use ES2022 module output directly so ts-jest can run without an inline module override. Drop explicit node10 module resolution and the matching TypeScript deprecation suppression from test configs. --- packages/app-runtime/test/tsconfig.json | 2 -- packages/consumption/test/tsconfig.json | 2 -- packages/content/test/tsconfig.json | 2 -- packages/core-types/test/tsconfig.json | 2 -- packages/runtime/test/tsconfig.json | 2 -- packages/transport/test/tsconfig.json | 2 -- 6 files changed, 12 deletions(-) diff --git a/packages/app-runtime/test/tsconfig.json b/packages/app-runtime/test/tsconfig.json index 81d4fcff1..7d0c83d73 100644 --- a/packages/app-runtime/test/tsconfig.json +++ b/packages/app-runtime/test/tsconfig.json @@ -4,8 +4,6 @@ "noEmit": true, "composite": false, "module": "ES2022", - "moduleResolution": "node10", - "ignoreDeprecations": "6.0", "skipLibCheck": true, "types": ["jest", "node", "lokijs"] }, diff --git a/packages/consumption/test/tsconfig.json b/packages/consumption/test/tsconfig.json index 81d4fcff1..7d0c83d73 100644 --- a/packages/consumption/test/tsconfig.json +++ b/packages/consumption/test/tsconfig.json @@ -4,8 +4,6 @@ "noEmit": true, "composite": false, "module": "ES2022", - "moduleResolution": "node10", - "ignoreDeprecations": "6.0", "skipLibCheck": true, "types": ["jest", "node", "lokijs"] }, diff --git a/packages/content/test/tsconfig.json b/packages/content/test/tsconfig.json index 71b5b3942..ca871e366 100644 --- a/packages/content/test/tsconfig.json +++ b/packages/content/test/tsconfig.json @@ -4,8 +4,6 @@ "noEmit": true, "composite": false, "module": "ES2022", - "moduleResolution": "node10", - "ignoreDeprecations": "6.0", "types": ["jest", "node"] }, "files": ["../../../node_modules/jest-expect-message/types/index.d.ts"], diff --git a/packages/core-types/test/tsconfig.json b/packages/core-types/test/tsconfig.json index 71b5b3942..ca871e366 100644 --- a/packages/core-types/test/tsconfig.json +++ b/packages/core-types/test/tsconfig.json @@ -4,8 +4,6 @@ "noEmit": true, "composite": false, "module": "ES2022", - "moduleResolution": "node10", - "ignoreDeprecations": "6.0", "types": ["jest", "node"] }, "files": ["../../../node_modules/jest-expect-message/types/index.d.ts"], diff --git a/packages/runtime/test/tsconfig.json b/packages/runtime/test/tsconfig.json index 81d4fcff1..7d0c83d73 100644 --- a/packages/runtime/test/tsconfig.json +++ b/packages/runtime/test/tsconfig.json @@ -4,8 +4,6 @@ "noEmit": true, "composite": false, "module": "ES2022", - "moduleResolution": "node10", - "ignoreDeprecations": "6.0", "skipLibCheck": true, "types": ["jest", "node", "lokijs"] }, diff --git a/packages/transport/test/tsconfig.json b/packages/transport/test/tsconfig.json index 704a5334b..9c72500b7 100644 --- a/packages/transport/test/tsconfig.json +++ b/packages/transport/test/tsconfig.json @@ -4,8 +4,6 @@ "noEmit": true, "composite": false, "module": "ES2022", - "moduleResolution": "node10", - "ignoreDeprecations": "6.0", "types": ["jest", "node", "lokijs"] }, "files": ["../../../node_modules/jest-expect-message/types/index.d.ts"], From a6ad110408db2a8c3cd6129e59631fea017806d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20H=C3=BCgel?= Date: Wed, 19 Aug 2026 14:14:09 +0200 Subject: [PATCH 4/4] test: make Eudiplo helper ESM-compatible Replace __dirname usage in the Eudiplo testcontainer helper with an import.meta.url based path. --- .dev/eudiplo/startEudiplo.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.dev/eudiplo/startEudiplo.ts b/.dev/eudiplo/startEudiplo.ts index 544efc7a7..678631808 100644 --- a/.dev/eudiplo/startEudiplo.ts +++ b/.dev/eudiplo/startEudiplo.ts @@ -1,5 +1,5 @@ -import path from "path"; import { GenericContainer, StartedTestContainer, Wait } from "testcontainers"; +import { fileURLToPath } from "url"; export async function startEudiplo(): Promise { return await new GenericContainer("ghcr.io/openwallet-foundation/eudiplo:6.1.0@sha256:1aa0fd250d40c88f842dd5853dba81f87b75bc435b486b79e0789ed9297440ce") @@ -16,7 +16,7 @@ export async function startEudiplo(): Promise { .withExposedPorts({ container: 3000, host: 3000 }) .withCopyDirectoriesToContainer([ { - source: path.resolve(path.join(__dirname, "config")), + source: fileURLToPath(new URL("config", import.meta.url)), target: "/app/assets/config" } ])