diff --git a/packages/@n8n/backend-common/src/modules/__tests__/module-registry.test.ts b/packages/@n8n/backend-common/src/modules/__tests__/module-registry.test.ts index f4109d9027..cdb761cc34 100644 --- a/packages/@n8n/backend-common/src/modules/__tests__/module-registry.test.ts +++ b/packages/@n8n/backend-common/src/modules/__tests__/module-registry.test.ts @@ -161,7 +161,7 @@ describe('initModules', () => { expect(moduleRegistry.settings.get(moduleName)).toBe(moduleSettings); }); - it('activates the module', async () => { + it('activates module with settings', async () => { // ARRANGE const moduleName = 'test-module'; const moduleSettings = { foo: 1 }; @@ -184,4 +184,26 @@ describe('initModules', () => { expect(moduleRegistry.isActive(moduleName as any)).toBe(true); expect(moduleRegistry.getActiveModules()).toEqual([moduleName]); }); + + it('activates module without settings', async () => { + // ARRANGE + const moduleName = 'test-module'; + const ModuleClass: ModuleInterface = { + init: jest.fn(), + }; + const moduleMetadata = mock({ + getEntries: jest.fn().mockReturnValue([[moduleName, { class: ModuleClass }]]), + }); + Container.get = jest.fn().mockReturnValue(ModuleClass); + + const moduleRegistry = new ModuleRegistry(moduleMetadata, mock(), mock(), mock()); + + // ACT + await moduleRegistry.initModules(); + + // ASSERT + // eslint-disable-next-line @typescript-eslint/no-explicit-any + expect(moduleRegistry.isActive(moduleName as any)).toBe(true); + expect(moduleRegistry.getActiveModules()).toEqual([moduleName]); + }); }); diff --git a/packages/@n8n/backend-common/src/modules/module-registry.ts b/packages/@n8n/backend-common/src/modules/module-registry.ts index 3cf446a689..d192bc4165 100644 --- a/packages/@n8n/backend-common/src/modules/module-registry.ts +++ b/packages/@n8n/backend-common/src/modules/module-registry.ts @@ -106,9 +106,7 @@ export class ModuleRegistry { const moduleSettings = await Container.get(ModuleClass).settings?.(); - if (!moduleSettings) continue; - - this.settings.set(moduleName, moduleSettings); + if (moduleSettings) this.settings.set(moduleName, moduleSettings); this.logger.debug(`Initialized module "${moduleName}"`); diff --git a/packages/@n8n/decorators/src/module/module.ts b/packages/@n8n/decorators/src/module/module.ts index 7ba91dd68b..3f29e99b29 100644 --- a/packages/@n8n/decorators/src/module/module.ts +++ b/packages/@n8n/decorators/src/module/module.ts @@ -16,7 +16,13 @@ export interface BaseEntity { reload(): Promise; } -export type EntityClass = new () => BaseEntity; +export interface TimestampedEntity { + id: string; + createdAt: Date; + updatedAt: Date; +} + +export type EntityClass = new () => BaseEntity | TimestampedEntity; export type ModuleSettings = Record;