fix(medusa): PluginLoaders when loading services should only look for js files (#1473)

This commit is contained in:
Adrien de Peretti
2022-05-09 09:42:47 +02:00
committed by GitHub
parent 525910f72a
commit c67d6bee30
2 changed files with 63 additions and 2 deletions

View File

@@ -0,0 +1,61 @@
import { createContainer, asValue } from "awilix"
import { mkdirSync, rmSync, rmdirSync, writeFileSync } from "fs"
import { resolve } from "path"
import Logger from "../logger"
import { registerServices } from "../plugins"
import { MedusaContainer } from "../../types/global"
const distTestTargetDirectorPath = resolve(__dirname, "__pluginsLoaderTest__")
const servicesTestTargetDirectoryPath = resolve(distTestTargetDirectorPath, "services")
const buildServiceTemplate = (name: string) => {
return `
import { BaseService } from "medusa-interfaces"
export default class ${name}Service extends BaseService {}
`
}
describe('plugins loader', () => {
const container = createContainer() as MedusaContainer
const pluginsDetails = {
resolve: resolve(__dirname, "__pluginsLoaderTest__"),
name: `project-plugin`,
id: "fakeId",
options: {},
version: '"fakeVersion',
}
describe("registerServices", function() {
beforeAll(() => {
container.register("logger", asValue(Logger))
mkdirSync(servicesTestTargetDirectoryPath, { mode: "777", recursive: true })
writeFileSync(resolve(servicesTestTargetDirectoryPath, "test.js"), buildServiceTemplate("test"))
writeFileSync(resolve(servicesTestTargetDirectoryPath, "test2.js"), buildServiceTemplate("test2"))
writeFileSync(resolve(servicesTestTargetDirectoryPath, "test2.js.map"), "map:file")
writeFileSync(resolve(servicesTestTargetDirectoryPath, "test2.d.ts"), "export interface Test {}")
})
afterAll(() => {
rmSync(distTestTargetDirectorPath, { recursive: true, force: true })
jest.clearAllMocks()
})
it('should load the services from the services directory but only js files', async () => {
let err;
try {
await registerServices(pluginsDetails, container)
} catch (e) {
err = e
}
expect(err).toBeFalsy()
const testService: (...args: unknown[]) => any = container.resolve("testService")
const test2Service: (...args: unknown[]) => any = container.resolve("test2Service")
expect(testService).toBeTruthy()
expect(testService.constructor.name).toBe("testService")
expect(test2Service).toBeTruthy()
expect(test2Service.constructor.name).toBe("test2Service")
})
})
})

View File

@@ -245,8 +245,8 @@ function registerApi(
* registered
* @return {void}
*/
async function registerServices(pluginDetails: PluginDetails, container: MedusaContainer): Promise<void> {
const files = glob.sync(`${pluginDetails.resolve}/services/[!__]*`, {})
export async function registerServices(pluginDetails: PluginDetails, container: MedusaContainer): Promise<void> {
const files = glob.sync(`${pluginDetails.resolve}/services/[!__]*.js`, {})
await Promise.all(
files.map(async (fn) => {
const loaded = require(fn).default