chore: Update module test runner to support DmlEntities when needed (#7799)

* chore: Update module test runner to support DmlEntities when needed

* update es version for core test utils

* fix test

* update swc config
This commit is contained in:
Adrien de Peretti
2024-06-24 09:44:01 +02:00
committed by GitHub
parent 8fa43a6db3
commit ae6dbc06be
20 changed files with 202 additions and 52 deletions

View File

@@ -16,7 +16,17 @@ module.exports = {
`.cache`,
],
transformIgnorePatterns: ["/dist", "/node_modules/"],
transform: { "^.+\\.[jt]s$": ["@swc/jest"] },
transform: {
"^.+\\.[jt]s$": [
"@swc/jest",
{
jsc: {
parser: { syntax: "typescript", decorators: true },
transform: { decoratorMetadata: true },
},
},
],
},
setupFiles: ["../setup-env.js"],
setupFilesAfterEnv: ["../setup.js"],
globalSetup: "../globalSetup.js",

View File

@@ -5,7 +5,15 @@ module.exports = {
rootDir: "./",
transformIgnorePatterns: ["/dist", "/node_modules/"],
transform: {
"^.+\\.[jt]s$": ["@swc/jest"],
"^.+\\.[jt]s$": [
"@swc/jest",
{
jsc: {
parser: { syntax: "typescript", decorators: true },
transform: { decoratorMetadata: true },
},
},
],
},
setupFiles: ["../setup-env.js"],
}

View File

@@ -26,7 +26,17 @@ module.exports = {
`__testfixtures__`,
`.cache`,
],
transform: { "^.+\\.[jt]s$": ["@swc/jest"] },
transform: {
"^.+\\.[jt]s$": [
"@swc/jest",
{
jsc: {
parser: { syntax: "typescript", decorators: true },
transform: { decoratorMetadata: true },
},
},
],
},
setupFiles: ["<rootDir>/integration-tests/setup-env.js"],
setupFilesAfterEnv: ["<rootDir>/integration-tests/setup.js"],
}

View File

@@ -15,7 +15,15 @@ module.exports = {
],
transformIgnorePatterns: ["/dist", "/node_modules/"],
transform: {
"^.+\\.[jt]s$": ["@swc/jest"],
"^.+\\.[jt]s$": [
"@swc/jest",
{
jsc: {
parser: { syntax: "typescript", decorators: true },
transform: { decoratorMetadata: true },
},
},
],
},
setupFiles: ["../setup-env.js"],
/*setupFilesAfterEnv: ["../setup.js"],

View File

@@ -1,7 +1,7 @@
{
"compilerOptions": {
"lib": ["es5", "es6", "es2019"],
"target": "es5",
"target": "es2022",
"outDir": "./dist",
"esModuleInterop": true,
"declaration": true,

View File

@@ -1,5 +1,15 @@
module.exports = {
transform: { "^.+\\.[jt]s$": ["@swc/jest"] },
transform: {
"^.+\\.[jt]s$": [
"@swc/jest",
{
jsc: {
parser: { syntax: "typescript", decorators: true },
transform: { decoratorMetadata: true },
},
},
],
},
testEnvironment: `node`,
moduleFileExtensions: [`js`, `ts`],
}

View File

@@ -3,6 +3,7 @@ import { initModules, InitModulesOptions } from "./init-modules"
import { ContainerRegistrationKeys, ModulesSdkUtils } from "@medusajs/utils"
import { MockEventBusService } from "."
import { toMikroOrmEntities } from "@medusajs/utils/src"
export interface SuiteOptions<TService = unknown> {
MikroOrmWrapper: TestDatabase
@@ -41,7 +42,7 @@ export function moduleIntegrationTestRunner<TService = any>({
process.env.LOG_LEVEL = "error"
moduleModels ??= Object.values(require(`${process.cwd()}/src/models`))
// migrationPath ??= process.cwd() + "/src/migrations/!(*.d).{js,ts,cjs}"
moduleModels = toMikroOrmEntities(moduleModels)
const tempName = parseInt(process.env.JEST_WORKER_ID || "1")
const dbName = `medusa-${moduleName.toLowerCase()}-integration-${tempName}`

View File

@@ -1,7 +1,7 @@
{
"compilerOptions": {
"lib": ["es5", "es6", "es2019"],
"target": "es5",
"target": "es2022",
"outDir": "./dist",
"esModuleInterop": true,
"declaration": true,

View File

@@ -632,4 +632,24 @@ export function createMikrORMEntity() {
}
}
export const toMikroORMEntity = createMikrORMEntity()
/**
* Takes a DML entity and returns a Mikro ORM entity otherwise
* return the input idempotently
* @param entity
*/
export const toMikroORMEntity = (entity: any) => {
if (DmlEntity.isDmlEntity(entity)) {
return createMikrORMEntity()(entity)
}
return entity
}
/**
* Takes any DmlEntity or mikro orm entities and return mikro orm entities only.
* This action is idempotent if non of the entities are DmlEntity
* @param entities
*/
export const toMikroOrmEntities = function (entities: any[]) {
return entities.map(toMikroORMEntity)
}

View File

@@ -11,3 +11,4 @@ export * from "./medusa-service"
export * from "./definition"
export * from "./event-builder-factory"
export * from "./joiner-config-builder"
export * from "./loaders/load-models"

View File

@@ -8,7 +8,7 @@ import {
upperCaseFirst,
} from "../common"
import { join } from "path"
import { readdirSync, statSync } from "fs"
import { loadModels } from "./loaders/load-models"
/**
* Define joiner config for a module based on the models (object representation or entities) present in the models directory. This action will be sync until
@@ -111,37 +111,3 @@ export function buildEntitiesNameToLinkableKeysMap(
return entityLinkableKeysMap
}
function loadModels(basePath: string) {
const excludedExtensions = [".ts.map", ".js.map", ".d.ts"]
let modelsFiles: any[] = []
try {
modelsFiles = readdirSync(basePath)
} catch (e) {}
return modelsFiles
.flatMap((file) => {
if (
file.startsWith("index.") ||
excludedExtensions.some((ext) => file.endsWith(ext))
) {
return
}
const filePath = join(basePath, file)
const stats = statSync(filePath)
if (stats.isFile()) {
try {
const required = require(filePath)
return Object.values(required).filter(
(resource) => typeof resource === "function" && !!resource.name
)
} catch (e) {}
}
return
})
.filter(Boolean) as { name: string }[]
}

View File

@@ -0,0 +1,40 @@
import { readdirSync, statSync } from "fs"
import { join } from "path"
/**
* Load all the models from the given path
* @param basePath
*/
export function loadModels(basePath: string) {
const excludedExtensions = [".ts.map", ".js.map", ".d.ts"]
let modelsFiles: any[] = []
try {
modelsFiles = readdirSync(basePath)
} catch (e) {}
return modelsFiles
.flatMap((file) => {
if (
file.startsWith("index.") ||
excludedExtensions.some((ext) => file.endsWith(ext))
) {
return
}
const filePath = join(basePath, file)
const stats = statSync(filePath)
if (stats.isFile()) {
try {
const required = require(filePath)
return Object.values(required).filter(
(resource) => typeof resource === "function" && !!resource.name
)
} catch (e) {}
}
return
})
.filter(Boolean) as { name: string }[]
}

View File

@@ -1,6 +1,14 @@
module.exports = {
transform: {
"^.+\\.[jt]s$": ["@swc/jest"],
"^.+\\.[jt]s$": [
"@swc/jest",
{
jsc: {
parser: { syntax: "typescript", decorators: true },
transform: { decoratorMetadata: true },
},
},
],
},
testEnvironment: `node`,
moduleFileExtensions: [`js`, `ts`],

View File

@@ -1,5 +1,15 @@
module.exports = {
transform: { "^.+\\.[jt]s$": "@swc/jest" },
transform: {
"^.+\\.[jt]s$": [
"@swc/jest",
{
jsc: {
parser: { syntax: "typescript", decorators: true },
transform: { decoratorMetadata: true },
},
},
],
},
testEnvironment: `node`,
moduleFileExtensions: [`js`, `ts`],
}

View File

@@ -1,6 +1,14 @@
module.exports = {
transform: {
"^.+\\.[jt]s$": ["@swc/jest"],
"^.+\\.[jt]s$": [
"@swc/jest",
{
jsc: {
parser: { syntax: "typescript", decorators: true },
transform: { decoratorMetadata: true },
},
},
],
},
testEnvironment: `node`,
moduleFileExtensions: [`js`, `ts`],

View File

@@ -1,5 +1,15 @@
module.exports = {
transform: { "^.+\\.[jt]s$": ["@swc/jest"] },
transform: {
"^.+\\.[jt]s$": [
"@swc/jest",
{
jsc: {
parser: { syntax: "typescript", decorators: true },
transform: { decoratorMetadata: true },
},
},
],
},
testEnvironment: `node`,
moduleFileExtensions: [`js`, `ts`],
}

View File

@@ -1,5 +1,15 @@
module.exports = {
transform: { "^.+\\.[jt]s$": ["@swc/jest"] },
transform: {
"^.+\\.[jt]s$": [
"@swc/jest",
{
jsc: {
parser: { syntax: "typescript", decorators: true },
transform: { decoratorMetadata: true },
},
},
],
},
testEnvironment: `node`,
moduleFileExtensions: [`js`, `jsx`, `ts`, `tsx`, `json`],
}

View File

@@ -1,5 +1,15 @@
module.exports = {
transform: { "^.+\\.[jt]s$": ["@swc/jest"] },
transform: {
"^.+\\.[jt]s$": [
"@swc/jest",
{
jsc: {
parser: { syntax: "typescript", decorators: true },
transform: { decoratorMetadata: true },
},
},
],
},
testEnvironment: `node`,
moduleFileExtensions: [`js`, `jsx`, `ts`, `tsx`, `json`],
}

View File

@@ -1,5 +1,15 @@
module.exports = {
transform: { "^.+\\.[jt]s$": ["@swc/jest"] },
transform: {
"^.+\\.[jt]s$": [
"@swc/jest",
{
jsc: {
parser: { syntax: "typescript", decorators: true },
transform: { decoratorMetadata: true },
},
},
],
},
testEnvironment: `node`,
moduleFileExtensions: [`js`, `jsx`, `ts`, `tsx`, `json`],
}

View File

@@ -1,5 +1,15 @@
module.exports = {
transform: { "^.+\\.[jt]s$": ["@swc/jest"] },
transform: {
"^.+\\.[jt]s$": [
"@swc/jest",
{
jsc: {
parser: { syntax: "typescript", decorators: true },
transform: { decoratorMetadata: true },
},
},
],
},
testEnvironment: `node`,
moduleFileExtensions: [`js`, `jsx`, `ts`, `tsx`, `json`],
}