feat(modules-sdk): Module as singleton instances (#4065)

This commit is contained in:
Carlos R. L. Rodrigues
2023-05-18 10:12:18 +02:00
committed by GitHub
parent ed382f2ee5
commit e73c3e51c9
5 changed files with 77 additions and 14 deletions
@@ -0,0 +1,61 @@
import {
InternalModuleDeclaration,
MODULE_RESOURCE_TYPE,
MODULE_SCOPE,
} from "@medusajs/types"
import { MedusaModule } from "../../medusa-module"
const mockRegisterMedusaModule = jest
.fn()
.mockImplementation(() => Promise.resolve([]))
const mockModuleLoader = jest.fn().mockImplementation(() => Promise.resolve({}))
jest.mock("./../../loaders", () => ({
registerMedusaModule: jest
.fn()
.mockImplementation((...args) => mockRegisterMedusaModule()),
moduleLoader: jest.fn().mockImplementation((...args) => mockModuleLoader()),
}))
describe("Medusa Module", () => {
beforeEach(() => {
jest.resetModules()
jest.clearAllMocks()
})
it("MedusaModule bootstrap - Singleton instances", async () => {
await MedusaModule.bootstrap(
"moduleKey",
"@path",
{
scope: MODULE_SCOPE.INTERNAL,
resources: MODULE_RESOURCE_TYPE.ISOLATED,
resolve: "@path",
options: {
abc: 123,
},
} as InternalModuleDeclaration,
{}
)
expect(mockRegisterMedusaModule).toBeCalledTimes(1)
expect(mockModuleLoader).toBeCalledTimes(1)
await MedusaModule.bootstrap(
"moduleKey",
"@path",
{
scope: MODULE_SCOPE.INTERNAL,
resources: MODULE_RESOURCE_TYPE.ISOLATED,
resolve: "@path",
options: {
abc: 123,
},
} as InternalModuleDeclaration,
{}
)
expect(mockRegisterMedusaModule).toBeCalledTimes(1)
expect(mockModuleLoader).toBeCalledTimes(1)
})
})
@@ -1,22 +1,12 @@
import {
ModuleResolution,
MODULE_RESOURCE_TYPE,
MODULE_SCOPE,
ModuleResolution,
} from "@medusajs/types"
import { AwilixContainer, ClassOrFunctionReturning, Resolver } from "awilix"
import { createMedusaContainer } from "medusa-core-utils"
import { EOL } from "os"
import { moduleLoader } from "../module-loader"
import { trackInstallation } from "../__mocks__/medusa-telemetry"
function asArray(
resolvers: (ClassOrFunctionReturning<unknown> | Resolver<unknown>)[]
): { resolve: (container: AwilixContainer) => unknown[] } {
return {
resolve: (container: AwilixContainer): unknown[] =>
resolvers.map((resolver) => container.build(resolver)),
}
}
import { moduleLoader } from "../module-loader"
const logger = {
warn: jest.fn(),