From a3e969625d04b652ecdda9dab1b5620090eaf5ed Mon Sep 17 00:00:00 2001 From: Hazelnoot Date: Wed, 1 Oct 2025 11:56:16 -0400 Subject: [PATCH] remove inline providers from unit tests --- .../unit/AbuseReportNotificationService.ts | 44 ++++++------------- packages/backend/test/unit/CaptchaService.ts | 23 +++------- .../backend/test/unit/CustomEmojiService.ts | 13 +----- packages/backend/test/unit/FileInfoService.ts | 6 +-- packages/backend/test/unit/RelayService.ts | 18 +++----- packages/backend/test/unit/S3Service.ts | 5 +-- 6 files changed, 33 insertions(+), 76 deletions(-) diff --git a/packages/backend/test/unit/AbuseReportNotificationService.ts b/packages/backend/test/unit/AbuseReportNotificationService.ts index 948f0cd18e..24e75feb82 100644 --- a/packages/backend/test/unit/AbuseReportNotificationService.ts +++ b/packages/backend/test/unit/AbuseReportNotificationService.ts @@ -29,6 +29,7 @@ import { GlobalEventService } from '@/core/GlobalEventService.js'; import { RecipientMethod } from '@/models/AbuseReportNotificationRecipient.js'; import { SystemWebhookService } from '@/core/SystemWebhookService.js'; import { UserEntityService } from '@/core/entities/UserEntityService.js'; +import { CoreModule } from '@/core/CoreModule.js'; process.env.NODE_ENV = 'test'; @@ -114,39 +115,20 @@ describe('AbuseReportNotificationService', () => { .createTestingModule({ imports: [ GlobalModule, - ], - providers: [ - AbuseReportNotificationService, - IdService, - { - provide: RoleService, useFactory: () => ({ getModeratorIds: jest.fn() }), - }, - { - provide: SystemWebhookService, useFactory: () => ({ enqueueSystemWebhook: jest.fn() }), - }, - { - provide: UserEntityService, useFactory: () => ({ - pack: (v: any) => Promise.resolve(v), - packMany: (v: any) => Promise.resolve(v), - }), - }, - { - provide: EmailService, useFactory: () => ({ sendEmail: jest.fn() }), - }, - { - provide: MetaService, useFactory: () => ({ fetch: jest.fn() }), - }, - { - provide: ModerationLogService, useFactory: () => ({ log: () => Promise.resolve() }), - }, - { - provide: GlobalEventService, useFactory: () => ({ publishAdminStream: jest.fn() }), - }, - { - provide: DI.meta, useFactory: () => meta, - }, + CoreModule, ], }) + .overrideProvider(RoleService).useValue({ getModeratorIds: jest.fn() }) + .overrideProvider(SystemWebhookService).useValue({ enqueueSystemWebhook: jest.fn() }) + .overrideProvider(UserEntityService).useValue({ + pack: (v: any) => Promise.resolve(v), + packMany: (v: any) => Promise.resolve(v), + }) + .overrideProvider(EmailService).useValue({ sendEmail: jest.fn() }) + .overrideProvider(MetaService).useValue({ fetch: jest.fn() }) + .overrideProvider(ModerationLogService).useValue({ log: () => Promise.resolve() }) + .overrideProvider(GlobalEventService).useValue({ publishAdminStream: jest.fn() }) + .overrideProvider(DI.meta).useValue(meta) .compile(); await app.init(); diff --git a/packages/backend/test/unit/CaptchaService.ts b/packages/backend/test/unit/CaptchaService.ts index 6afac8c284..4c32991e3f 100644 --- a/packages/backend/test/unit/CaptchaService.ts +++ b/packages/backend/test/unit/CaptchaService.ts @@ -8,8 +8,6 @@ import { Test, TestingModule } from '@nestjs/testing'; import { Response } from 'node-fetch'; import { CaptchaError, - CaptchaErrorCode, - captchaErrorCodes, CaptchaSaveResult, CaptchaService, } from '@/core/CaptchaService.js'; @@ -18,6 +16,8 @@ import { HttpRequestService } from '@/core/HttpRequestService.js'; import { MetaService } from '@/core/MetaService.js'; import { MiMeta } from '@/models/Meta.js'; import { LoggerService } from '@/core/LoggerService.js'; +import { CoreModule } from '@/core/CoreModule.js'; +import { captchaErrorCodes, type CaptchaErrorCode } from '@/misc/captcha-error.js'; describe('CaptchaService', () => { let app: TestingModule; @@ -29,21 +29,12 @@ describe('CaptchaService', () => { app = await Test.createTestingModule({ imports: [ GlobalModule, + CoreModule, ], - providers: [ - CaptchaService, - LoggerService, - { - provide: HttpRequestService, useFactory: () => ({ send: jest.fn() }), - }, - { - provide: MetaService, useFactory: () => ({ - fetch: jest.fn(), - update: jest.fn(), - }), - }, - ], - }).compile(); + }) + .overrideProvider(HttpRequestService).useValue({ send: jest.fn() }) + .overrideProvider(MetaService).useValue({ fetch: jest.fn(), update: jest.fn() }) + .compile(); await app.init(); app.enableShutdownHooks(); diff --git a/packages/backend/test/unit/CustomEmojiService.ts b/packages/backend/test/unit/CustomEmojiService.ts index c3ea1589d2..a22c9ed3f3 100644 --- a/packages/backend/test/unit/CustomEmojiService.ts +++ b/packages/backend/test/unit/CustomEmojiService.ts @@ -5,6 +5,7 @@ import { afterEach, beforeAll, describe, test } from '@jest/globals'; import { Test, TestingModule } from '@nestjs/testing'; +import { DataSource } from 'typeorm'; import { CustomEmojiService } from '@/core/CustomEmojiService.js'; import { EmojiEntityService } from '@/core/entities/EmojiEntityService.js'; import { GlobalEventService } from '@/core/GlobalEventService.js'; @@ -17,7 +18,6 @@ import { EmojisRepository } from '@/models/_.js'; import { MiEmoji } from '@/models/Emoji.js'; import { CoreModule } from '@/core/CoreModule.js'; import { DriveService } from '@/core//DriveService.js'; -import { DataSource } from 'typeorm'; describe('CustomEmojiService', () => { let app: TestingModule; @@ -33,15 +33,6 @@ describe('CustomEmojiService', () => { GlobalModule, CoreModule, ], - providers: [ - CustomEmojiService, - UtilityService, - IdService, - EmojiEntityService, - ModerationLogService, - GlobalEventService, - DriveService, - ], }) .compile(); @@ -51,7 +42,7 @@ describe('CustomEmojiService', () => { service = app.get(CustomEmojiService); emojisRepository = app.get(DI.emojisRepository); idService = app.get(IdService); - await app.get(DI.db).query("set session time zone 'UTC'"); + await app.get(DI.db).query('set session time zone \'UTC\''); }); afterAll(async () => { diff --git a/packages/backend/test/unit/FileInfoService.ts b/packages/backend/test/unit/FileInfoService.ts index d09fbc65df..2796fcfbd6 100644 --- a/packages/backend/test/unit/FileInfoService.ts +++ b/packages/backend/test/unit/FileInfoService.ts @@ -16,6 +16,7 @@ import { FileInfo, FileInfoService } from '@/core/FileInfoService.js'; //import { DI } from '@/di-symbols.js'; import { LoggerService } from '@/core/LoggerService.js'; import type { TestingModule } from '@nestjs/testing'; +import { CoreModule } from '@/core/CoreModule.js'; import type { MockFunctionMetadata } from 'jest-mock'; const _filename = fileURLToPath(import.meta.url); @@ -41,10 +42,7 @@ describe('FileInfoService', () => { app = await Test.createTestingModule({ imports: [ GlobalModule, - ], - providers: [ - LoggerService, - FileInfoService, + CoreModule, ], }) .useMocker((token) => { diff --git a/packages/backend/test/unit/RelayService.ts b/packages/backend/test/unit/RelayService.ts index 959017260a..c3a3e41d63 100644 --- a/packages/backend/test/unit/RelayService.ts +++ b/packages/backend/test/unit/RelayService.ts @@ -18,6 +18,7 @@ import { RelayService } from '@/core/RelayService.js'; import { SystemAccountService } from '@/core/SystemAccountService.js'; import { GlobalModule } from '@/GlobalModule.js'; import { UtilityService } from '@/core/UtilityService.js'; +import { CoreModule } from '@/core/CoreModule.js'; const moduleMocker = new ModuleMocker(global); @@ -30,26 +31,17 @@ describe('RelayService', () => { app = await Test.createTestingModule({ imports: [ GlobalModule, - ], - providers: [ - IdService, - ApRendererService, - RelayService, - UserEntityService, - SystemAccountService, - UtilityService, + CoreModule, ], }) .useMocker((token) => { - if (token === QueueService) { - return { deliver: jest.fn() }; - } if (typeof token === 'function') { const mockMetadata = moduleMocker.getMetadata(token) as MockFunctionMetadata; const Mock = moduleMocker.generateFromMetadata(mockMetadata); return new Mock(); } }) + .overrideProvider(QueueService).useValue({ deliver: jest.fn() }) .compile(); await app.init(); @@ -63,6 +55,10 @@ describe('RelayService', () => { await app.close(); }); + afterEach(() => { + queueService.deliver.mockReset(); + }); + test('addRelay', async () => { const result = await relayService.addRelay('https://example.com'); diff --git a/packages/backend/test/unit/S3Service.ts b/packages/backend/test/unit/S3Service.ts index 4967e41471..2d9131be13 100644 --- a/packages/backend/test/unit/S3Service.ts +++ b/packages/backend/test/unit/S3Service.ts @@ -14,7 +14,7 @@ import { UploadPartCommand, } from '@aws-sdk/client-s3'; import { mockClient } from 'aws-sdk-client-mock'; -import { FakeInternalEventService } from '../misc/FakeInternalEventService.js'; +import { MockInternalEventService } from '../misc/MockInternalEventService.js'; import type { TestingModule } from '@nestjs/testing'; import { GlobalModule } from '@/GlobalModule.js'; import { CoreModule } from '@/core/CoreModule.js'; @@ -33,9 +33,8 @@ describe('S3Service', () => { beforeAll(async () => { app = await Test.createTestingModule({ imports: [GlobalModule, CoreModule], - providers: [S3Service], }) - .overrideProvider(InternalEventService).useClass(FakeInternalEventService) + .overrideProvider(InternalEventService).useClass(MockInternalEventService) .compile(); await app.init();