From fad4b7f3fc3c3a906d3392c43a624eccce39f940 Mon Sep 17 00:00:00 2001 From: DarkSky Date: Wed, 1 Jul 2026 09:02:57 +0800 Subject: [PATCH] fix: test & lint --- .../server/src/__tests__/create-module.ts | 18 +++++++++++++++--- .../server/src/__tests__/mocks/index.ts | 3 ++- .../server/src/__tests__/mocks/queue.mock.ts | 8 ++++++++ .../src/__tests__/utils/testing-module.ts | 16 +++++++++++++--- 4 files changed, 38 insertions(+), 7 deletions(-) diff --git a/packages/backend/server/src/__tests__/create-module.ts b/packages/backend/server/src/__tests__/create-module.ts index 2b90525c52..d17881cbea 100644 --- a/packages/backend/server/src/__tests__/create-module.ts +++ b/packages/backend/server/src/__tests__/create-module.ts @@ -7,8 +7,13 @@ import { import { PrismaClient } from '@prisma/client'; import { FunctionalityModules } from '../app.module'; -import { AFFiNELogger, EventBus, JobQueue } from '../base'; -import { createFactory, MockEventBus, MockJobQueue } from './mocks'; +import { AFFiNELogger, EventBus, JobModule, JobQueue } from '../base'; +import { + createFactory, + MockEventBus, + MockJobModule, + MockJobQueue, +} from './mocks'; import { TEST_LOG_LEVEL } from './utils'; interface TestingModuleMetadata extends ModuleMetadata { @@ -26,10 +31,17 @@ export async function createModule( metadata: TestingModuleMetadata = {} ): Promise { const { tapModule, ...meta } = metadata; + const functionalityModules = [ + ...FunctionalityModules.filter(module => { + const moduleType = 'module' in module ? module.module : module; + return moduleType !== JobModule; + }), + MockJobModule, + ]; const builder = Test.createTestingModule({ ...meta, - imports: [...FunctionalityModules, ...(meta.imports ?? [])], + imports: [...functionalityModules, ...(meta.imports ?? [])], }); builder diff --git a/packages/backend/server/src/__tests__/mocks/index.ts b/packages/backend/server/src/__tests__/mocks/index.ts index a1114fb9d9..28417c42e1 100644 --- a/packages/backend/server/src/__tests__/mocks/index.ts +++ b/packages/backend/server/src/__tests__/mocks/index.ts @@ -12,7 +12,7 @@ import { MockDocSnapshot } from './doc-snapshot.mock'; import { MockDocUser } from './doc-user.mock'; import { MockEventBus } from './eventbus.mock'; import { MockMailer } from './mailer.mock'; -import { MockJobQueue } from './queue.mock'; +import { MockJobModule, MockJobQueue } from './queue.mock'; import { MockTeamWorkspace } from './team-workspace.mock'; import { MockUser } from './user.mock'; import { MockUserSettings } from './user-settings.mock'; @@ -35,6 +35,7 @@ export { installMockCopilotRuntime, MockCopilotProvider, MockEventBus, + MockJobModule, MockJobQueue, MockMailer, }; diff --git a/packages/backend/server/src/__tests__/mocks/queue.mock.ts b/packages/backend/server/src/__tests__/mocks/queue.mock.ts index a2ec86b33b..a5aa3a2284 100644 --- a/packages/backend/server/src/__tests__/mocks/queue.mock.ts +++ b/packages/backend/server/src/__tests__/mocks/queue.mock.ts @@ -1,3 +1,4 @@ +import { Global, Module } from '@nestjs/common'; import { interval, map, take, takeUntil } from 'rxjs'; import Sinon from 'sinon'; @@ -57,3 +58,10 @@ export class MockJobQueue { return this.add.getCalls().filter(call => call.args[0] === name).length; } } + +@Global() +@Module({ + providers: [{ provide: JobQueue, useClass: MockJobQueue }], + exports: [JobQueue], +}) +export class MockJobModule {} diff --git a/packages/backend/server/src/__tests__/utils/testing-module.ts b/packages/backend/server/src/__tests__/utils/testing-module.ts index 06f5eb2e68..f8dc831026 100644 --- a/packages/backend/server/src/__tests__/utils/testing-module.ts +++ b/packages/backend/server/src/__tests__/utils/testing-module.ts @@ -9,7 +9,7 @@ import { import { PrismaClient } from '@prisma/client'; import { buildAppModule, FunctionalityModules } from '../../app.module'; -import { AFFiNELogger, ConfigFactory, JobQueue } from '../../base'; +import { AFFiNELogger, ConfigFactory, JobModule, JobQueue } from '../../base'; import { GqlModule } from '../../base/graphql'; import { ServerConfigModule } from '../../core'; import { AuthGuard, AuthModule } from '../../core/auth'; @@ -18,7 +18,7 @@ import { ModelsModule } from '../../models'; // for jsdoc inference // oxlint-disable-next-line no-unused-vars import type { createModule } from '../create-module'; -import { createFactory, MockJobQueue } from '../mocks'; +import { createFactory, MockJobModule, MockJobQueue } from '../mocks'; import { MockMailer } from '../mocks/mailer.mock'; import { initTestingDB, TEST_LOG_LEVEL } from './utils'; @@ -48,6 +48,16 @@ function dedupeModules(modules: NonNullable) { return Array.from(map.values()); } +function testingFunctionalityModules() { + return [ + ...FunctionalityModules.filter(module => { + const moduleType = 'module' in module ? module.module : module; + return moduleType !== JobModule; + }), + MockJobModule, + ]; +} + @Resolver(() => String) class MockResolver { @Query(() => String) @@ -70,7 +80,7 @@ export async function createTestingModule( imports[0].module?.name === 'AppModule' ? imports : dedupeModules([ - ...FunctionalityModules, + ...testingFunctionalityModules(), ModelsModule, AuthModule, GqlModule,