From 31ce0f7cd2abbad4d3760d589f9e535ad4da4238 Mon Sep 17 00:00:00 2001 From: Hazelnoot Date: Wed, 1 Oct 2025 11:50:15 -0400 Subject: [PATCH] use CacheManagementService in CheckModeratorsActivityProcessorService.ts tests --- ...CheckModeratorsActivityProcessorService.ts | 78 ++++++++----------- 1 file changed, 32 insertions(+), 46 deletions(-) diff --git a/packages/backend/test/unit/queue/processors/CheckModeratorsActivityProcessorService.ts b/packages/backend/test/unit/queue/processors/CheckModeratorsActivityProcessorService.ts index 07618e7762..f72f4cad7d 100644 --- a/packages/backend/test/unit/queue/processors/CheckModeratorsActivityProcessorService.ts +++ b/packages/backend/test/unit/queue/processors/CheckModeratorsActivityProcessorService.ts @@ -5,8 +5,9 @@ import { jest } from '@jest/globals'; import { Test, TestingModule } from '@nestjs/testing'; -import * as lolex from '@sinonjs/fake-timers'; import { addHours, addSeconds, subDays, subHours, subSeconds } from 'date-fns'; +import { GodOfTimeService } from '../../../misc/GodOfTimeService.js'; +import { MockLoggerService } from '../../../misc/MockLoggerService.js'; import { CheckModeratorsActivityProcessorService } from '@/queue/processors/CheckModeratorsActivityProcessorService.js'; import { MiSystemWebhook, MiUser, MiUserProfile, UserProfilesRepository, UsersRepository } from '@/models/_.js'; import { IdService } from '@/core/IdService.js'; @@ -19,12 +20,17 @@ import { EmailService } from '@/core/EmailService.js'; import { SystemWebhookService } from '@/core/SystemWebhookService.js'; import { AnnouncementService } from '@/core/AnnouncementService.js'; import { SystemWebhookEventType } from '@/models/SystemWebhook.js'; +import { CacheManagementService } from '@/core/CacheManagementService.js'; +import { TimeService } from '@/core/TimeService.js'; +import { CoreModule } from '@/core/CoreModule.js'; +import { QueueProcessorModule } from '@/queue/QueueProcessorModule.js'; +import { LoggerService } from '@/core/LoggerService.js'; const baseDate = new Date(Date.UTC(2000, 11, 15, 12, 0, 0)); describe('CheckModeratorsActivityProcessorService', () => { let app: TestingModule; - let clock: lolex.InstalledClock; + let timeService: GodOfTimeService; let service: CheckModeratorsActivityProcessorService; // -------------------------------------------------------------------------------------- @@ -32,6 +38,7 @@ describe('CheckModeratorsActivityProcessorService', () => { let usersRepository: UsersRepository; let userProfilesRepository: UserProfilesRepository; let idService: IdService; + let cacheManagementService: CacheManagementService; let roleService: jest.Mocked; let announcementService: jest.Mocked; let emailService: jest.Mocked; @@ -89,61 +96,44 @@ describe('CheckModeratorsActivityProcessorService', () => { .createTestingModule({ imports: [ GlobalModule, - ], - providers: [ - CheckModeratorsActivityProcessorService, - IdService, - { - provide: RoleService, useFactory: () => ({ getModerators: jest.fn() }), - }, - { - provide: MetaService, useFactory: () => ({ fetch: jest.fn() }), - }, - { - provide: AnnouncementService, useFactory: () => ({ create: jest.fn() }), - }, - { - provide: EmailService, useFactory: () => ({ sendEmail: jest.fn() }), - }, - { - provide: SystemWebhookService, useFactory: () => ({ - fetchActiveSystemWebhooks: jest.fn(), - enqueueSystemWebhook: jest.fn(), - }), - }, - { - provide: QueueLoggerService, useFactory: () => ({ - logger: ({ - createSubLogger: () => ({ - info: jest.fn(), - warn: jest.fn(), - succ: jest.fn(), - }), - }), - }), - }, + CoreModule, + QueueProcessorModule, ], }) + .overrideProvider(TimeService).useClass(GodOfTimeService) + .overrideProvider(RoleService).useValue({ getModerators: jest.fn() }) + .overrideProvider(MetaService).useValue({ fetch: jest.fn() }) + .overrideProvider(AnnouncementService).useValue({ create: jest.fn() }) + .overrideProvider(EmailService).useValue({ sendEmail: jest.fn() }) + .overrideProvider(SystemWebhookService).useValue({ + fetchActiveSystemWebhooks: jest.fn(), + enqueueSystemWebhook: jest.fn(), + }) + .overrideProvider(LoggerService).useClass(MockLoggerService) .compile(); + await app.init(); + app.enableShutdownHooks(); + usersRepository = app.get(DI.usersRepository); userProfilesRepository = app.get(DI.userProfilesRepository); service = app.get(CheckModeratorsActivityProcessorService); idService = app.get(IdService); + cacheManagementService = app.get(CacheManagementService); + timeService = app.get(TimeService); roleService = app.get(RoleService) as jest.Mocked; announcementService = app.get(AnnouncementService) as jest.Mocked; emailService = app.get(EmailService) as jest.Mocked; systemWebhookService = app.get(SystemWebhookService) as jest.Mocked; + }); - app.enableShutdownHooks(); + afterAll(async () => { + await app.close(); }); beforeEach(async () => { - clock = lolex.install({ - now: new Date(baseDate), - shouldClearNativeTimers: true, - }); + timeService.resetTo(baseDate.getTime()); systemWebhook1 = crateSystemWebhook({ on: ['inactiveModeratorsWarning'] }); systemWebhook2 = crateSystemWebhook({ on: ['inactiveModeratorsWarning', 'inactiveModeratorsInvitationOnlyChanged'] }); @@ -156,17 +146,13 @@ describe('CheckModeratorsActivityProcessorService', () => { }); afterEach(async () => { - clock.uninstall(); - await usersRepository.delete({}); await userProfilesRepository.delete({}); + await usersRepository.delete({}); roleService.getModerators.mockReset(); announcementService.create.mockReset(); emailService.sendEmail.mockReset(); systemWebhookService.enqueueSystemWebhook.mockReset(); - }); - - afterAll(async () => { - await app.close(); + cacheManagementService.clear(); }); // --------------------------------------------------------------------------------------