From e4f8e3d6cc90ba1570e4b0f3f09ac225ce6bc871 Mon Sep 17 00:00:00 2001 From: Pedro Guzman Date: Mon, 3 Nov 2025 11:22:51 +0100 Subject: [PATCH] Inject config module in tests (#13937) * add failing test * inject configModule in module test runner * changeset * fix injected configModule --- .changeset/silly-hats-unite.md | 5 ++ .../src/__fixtures__/test-module/index.ts | 8 +++ .../src/__fixtures__/test-module/service.ts | 17 ++++++ .../test-module/services/internal.ts | 11 ++++ .../src/__tests__/module-test-runner.spec.ts | 53 +++++++++++++++++++ .../src/module-test-runner.ts | 5 +- 6 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 .changeset/silly-hats-unite.md create mode 100644 packages/medusa-test-utils/src/__fixtures__/test-module/index.ts create mode 100644 packages/medusa-test-utils/src/__fixtures__/test-module/service.ts create mode 100644 packages/medusa-test-utils/src/__fixtures__/test-module/services/internal.ts create mode 100644 packages/medusa-test-utils/src/__tests__/module-test-runner.spec.ts diff --git a/.changeset/silly-hats-unite.md b/.changeset/silly-hats-unite.md new file mode 100644 index 0000000000..e07572d704 --- /dev/null +++ b/.changeset/silly-hats-unite.md @@ -0,0 +1,5 @@ +--- +"@medusajs/test-utils": patch +--- + +inject configModule in moduleIntegrationTestRunner diff --git a/packages/medusa-test-utils/src/__fixtures__/test-module/index.ts b/packages/medusa-test-utils/src/__fixtures__/test-module/index.ts new file mode 100644 index 0000000000..173eb5d9c6 --- /dev/null +++ b/packages/medusa-test-utils/src/__fixtures__/test-module/index.ts @@ -0,0 +1,8 @@ +import { Module } from "@medusajs/framework/utils" +import TestService from "./service" + +export const TEST_MODULE = "test" + +export default Module(TEST_MODULE, { + service: TestService, +}) diff --git a/packages/medusa-test-utils/src/__fixtures__/test-module/service.ts b/packages/medusa-test-utils/src/__fixtures__/test-module/service.ts new file mode 100644 index 0000000000..1850d585a8 --- /dev/null +++ b/packages/medusa-test-utils/src/__fixtures__/test-module/service.ts @@ -0,0 +1,17 @@ +export default class TestService { + private dependencies: Record + private options: any + + constructor(dependencies: Record, options: any) { + this.dependencies = dependencies + this.options = options + } + + async getDependencies(): Promise> { + return this.dependencies + } + + async getOptions(): Promise { + return this.options + } +} diff --git a/packages/medusa-test-utils/src/__fixtures__/test-module/services/internal.ts b/packages/medusa-test-utils/src/__fixtures__/test-module/services/internal.ts new file mode 100644 index 0000000000..cce5c71c60 --- /dev/null +++ b/packages/medusa-test-utils/src/__fixtures__/test-module/services/internal.ts @@ -0,0 +1,11 @@ +export default class InternalService { + private dependencies: Record + + constructor(dependencies: Record) { + this.dependencies = dependencies + } + + async getDependencies(): Promise> { + return this.dependencies + } +} diff --git a/packages/medusa-test-utils/src/__tests__/module-test-runner.spec.ts b/packages/medusa-test-utils/src/__tests__/module-test-runner.spec.ts new file mode 100644 index 0000000000..4bcc3aaba9 --- /dev/null +++ b/packages/medusa-test-utils/src/__tests__/module-test-runner.spec.ts @@ -0,0 +1,53 @@ +import { ContainerRegistrationKeys, Modules } from "@medusajs/framework/utils" +import TestService from "../__fixtures__/test-module/service" +import InternalService from "../__fixtures__/test-module/services/internal" +import { moduleIntegrationTestRunner } from "../module-test-runner" + +moduleIntegrationTestRunner({ + moduleName: "test", + resolve: "./__fixtures__/test-module", + moduleOptions: { + option1: "value1", + }, + testSuite: ({ service }) => { + describe("Module Test Runner", () => { + it("should inject all basic dependencies on the main service", async () => { + const dependencies = await service.getDependencies() + expect(dependencies[ContainerRegistrationKeys.LOGGER]).toBeDefined() + expect( + dependencies[ContainerRegistrationKeys.PG_CONNECTION] + ).toBeDefined() + expect(dependencies[Modules.EVENT_BUS]).toBeDefined() + expect(dependencies["baseRepository"]).toBeDefined() + + const configModule = + dependencies[ContainerRegistrationKeys.CONFIG_MODULE] + expect(configModule).toBeDefined() + expect(configModule.modules["test"]?.options?.option1).toBe("value1") + }) + + it("should inject internal services on the main service", async () => { + const dependencies = await service.getDependencies() + expect(dependencies["internalService"]).toBeInstanceOf(InternalService) + }) + + it("should inject basic dependencies on internal services", async () => { + const internalService = (await service.getDependencies())[ + "internalService" + ] as InternalService + const dependencies = await internalService.getDependencies() + expect(dependencies[ContainerRegistrationKeys.LOGGER]).toBeDefined() + expect( + dependencies[ContainerRegistrationKeys.PG_CONNECTION] + ).toBeDefined() + expect(dependencies[Modules.EVENT_BUS]).toBeDefined() + expect(dependencies["baseRepository"]).toBeDefined() + + const configModule = + dependencies[ContainerRegistrationKeys.CONFIG_MODULE] + expect(configModule).toBeDefined() + expect(configModule.modules["test"]?.options?.option1).toBe("value1") + }) + }) + }, +}) diff --git a/packages/medusa-test-utils/src/module-test-runner.ts b/packages/medusa-test-utils/src/module-test-runner.ts index c831da477b..6007e4e1ca 100644 --- a/packages/medusa-test-utils/src/module-test-runner.ts +++ b/packages/medusa-test-utils/src/module-test-runner.ts @@ -1,3 +1,4 @@ +import { logger } from "@medusajs/framework/logger" import { ContainerRegistrationKeys, DmlEntity, @@ -8,7 +9,6 @@ import { normalizeImportPathWithSource, toMikroOrmEntities, } from "@medusajs/framework/utils" -import { logger } from "@medusajs/framework/logger" import * as fs from "fs" import { getDatabaseURL, getMikroOrmWrapper, TestDatabase } from "./database" import { initModules, InitModulesOptions } from "./init-modules" @@ -183,6 +183,9 @@ class ModuleTestRunner { [ContainerRegistrationKeys.PG_CONNECTION]: this.connection, [Modules.EVENT_BUS]: new MockEventBusService(), [ContainerRegistrationKeys.LOGGER]: console, + [ContainerRegistrationKeys.CONFIG_MODULE]: { + modules: this.modulesConfig, + }, ...this.injectedDependencies, }, modulesConfig: this.modulesConfig,