fix: test & lint

This commit is contained in:
DarkSky
2026-07-01 09:02:57 +08:00
parent 8e7a57d0e3
commit fad4b7f3fc
4 changed files with 38 additions and 7 deletions
@@ -7,8 +7,13 @@ import {
import { PrismaClient } from '@prisma/client'; import { PrismaClient } from '@prisma/client';
import { FunctionalityModules } from '../app.module'; import { FunctionalityModules } from '../app.module';
import { AFFiNELogger, EventBus, JobQueue } from '../base'; import { AFFiNELogger, EventBus, JobModule, JobQueue } from '../base';
import { createFactory, MockEventBus, MockJobQueue } from './mocks'; import {
createFactory,
MockEventBus,
MockJobModule,
MockJobQueue,
} from './mocks';
import { TEST_LOG_LEVEL } from './utils'; import { TEST_LOG_LEVEL } from './utils';
interface TestingModuleMetadata extends ModuleMetadata { interface TestingModuleMetadata extends ModuleMetadata {
@@ -26,10 +31,17 @@ export async function createModule(
metadata: TestingModuleMetadata = {} metadata: TestingModuleMetadata = {}
): Promise<TestingModule> { ): Promise<TestingModule> {
const { tapModule, ...meta } = metadata; 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({ const builder = Test.createTestingModule({
...meta, ...meta,
imports: [...FunctionalityModules, ...(meta.imports ?? [])], imports: [...functionalityModules, ...(meta.imports ?? [])],
}); });
builder builder
@@ -12,7 +12,7 @@ import { MockDocSnapshot } from './doc-snapshot.mock';
import { MockDocUser } from './doc-user.mock'; import { MockDocUser } from './doc-user.mock';
import { MockEventBus } from './eventbus.mock'; import { MockEventBus } from './eventbus.mock';
import { MockMailer } from './mailer.mock'; import { MockMailer } from './mailer.mock';
import { MockJobQueue } from './queue.mock'; import { MockJobModule, MockJobQueue } from './queue.mock';
import { MockTeamWorkspace } from './team-workspace.mock'; import { MockTeamWorkspace } from './team-workspace.mock';
import { MockUser } from './user.mock'; import { MockUser } from './user.mock';
import { MockUserSettings } from './user-settings.mock'; import { MockUserSettings } from './user-settings.mock';
@@ -35,6 +35,7 @@ export {
installMockCopilotRuntime, installMockCopilotRuntime,
MockCopilotProvider, MockCopilotProvider,
MockEventBus, MockEventBus,
MockJobModule,
MockJobQueue, MockJobQueue,
MockMailer, MockMailer,
}; };
@@ -1,3 +1,4 @@
import { Global, Module } from '@nestjs/common';
import { interval, map, take, takeUntil } from 'rxjs'; import { interval, map, take, takeUntil } from 'rxjs';
import Sinon from 'sinon'; import Sinon from 'sinon';
@@ -57,3 +58,10 @@ export class MockJobQueue {
return this.add.getCalls().filter(call => call.args[0] === name).length; return this.add.getCalls().filter(call => call.args[0] === name).length;
} }
} }
@Global()
@Module({
providers: [{ provide: JobQueue, useClass: MockJobQueue }],
exports: [JobQueue],
})
export class MockJobModule {}
@@ -9,7 +9,7 @@ import {
import { PrismaClient } from '@prisma/client'; import { PrismaClient } from '@prisma/client';
import { buildAppModule, FunctionalityModules } from '../../app.module'; 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 { GqlModule } from '../../base/graphql';
import { ServerConfigModule } from '../../core'; import { ServerConfigModule } from '../../core';
import { AuthGuard, AuthModule } from '../../core/auth'; import { AuthGuard, AuthModule } from '../../core/auth';
@@ -18,7 +18,7 @@ import { ModelsModule } from '../../models';
// for jsdoc inference // for jsdoc inference
// oxlint-disable-next-line no-unused-vars // oxlint-disable-next-line no-unused-vars
import type { createModule } from '../create-module'; import type { createModule } from '../create-module';
import { createFactory, MockJobQueue } from '../mocks'; import { createFactory, MockJobModule, MockJobQueue } from '../mocks';
import { MockMailer } from '../mocks/mailer.mock'; import { MockMailer } from '../mocks/mailer.mock';
import { initTestingDB, TEST_LOG_LEVEL } from './utils'; import { initTestingDB, TEST_LOG_LEVEL } from './utils';
@@ -48,6 +48,16 @@ function dedupeModules(modules: NonNullable<ModuleMetadata['imports']>) {
return Array.from(map.values()); 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) @Resolver(() => String)
class MockResolver { class MockResolver {
@Query(() => String) @Query(() => String)
@@ -70,7 +80,7 @@ export async function createTestingModule(
imports[0].module?.name === 'AppModule' imports[0].module?.name === 'AppModule'
? imports ? imports
: dedupeModules([ : dedupeModules([
...FunctionalityModules, ...testingFunctionalityModules(),
ModelsModule, ModelsModule,
AuthModule, AuthModule,
GqlModule, GqlModule,