diff --git a/packages/backend/test/misc/MockApResolverService.ts b/packages/backend/test/misc/MockApResolverService.ts new file mode 100644 index 0000000000..c066c3c004 --- /dev/null +++ b/packages/backend/test/misc/MockApResolverService.ts @@ -0,0 +1,127 @@ +/* + * SPDX-FileCopyrightText: hazelnoot and other Sharkey contributors + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { Inject, Injectable } from '@nestjs/common'; +import { MockResolver } from './mock-resolver.js'; +import type { Config } from '@/config.js'; +import type { MiMeta } from '@/models/Meta.js'; +import type { + UsersRepository, + NotesRepository, + PollsRepository, + NoteReactionsRepository, + FollowRequestsRepository, +} from '@/models/_.js'; +import { ApResolverService } from '@/core/activitypub/ApResolverService.js'; +import { DI } from '@/di-symbols.js'; +import { UtilityService } from '@/core/UtilityService.js'; +import { SystemAccountService } from '@/core/SystemAccountService.js'; +import { ApRequestService } from '@/core/activitypub/ApRequestService.js'; +import { HttpRequestService } from '@/core/HttpRequestService.js'; +import { ApRendererService } from '@/core/activitypub/ApRendererService.js'; +import { ApDbResolverService } from '@/core/activitypub/ApDbResolverService.js'; +import { LoggerService } from '@/core/LoggerService.js'; +import { ApLogService } from '@/core/ApLogService.js'; +import { ApUtilityService } from '@/core/activitypub/ApUtilityService.js'; +import { CacheService } from '@/core/CacheService.js'; +import { bindThis } from '@/decorators.js'; + +/** + * Mock implementation of ApResolverService to automatically provide a MockResolver to the entire test environment. + */ +@Injectable() +export class MockApResolverService extends ApResolverService { + /** + * Resolver that will be provided. + */ + public readonly resolver: MockResolver; + + constructor( + @Inject(DI.config) + config: Config, + + @Inject(DI.meta) + meta: MiMeta, + + @Inject(DI.usersRepository) + usersRepository: UsersRepository, + + @Inject(DI.notesRepository) + notesRepository: NotesRepository, + + @Inject(DI.pollsRepository) + pollsRepository: PollsRepository, + + @Inject(DI.noteReactionsRepository) + noteReactionsRepository: NoteReactionsRepository, + + @Inject(DI.followRequestsRepository) + followRequestsRepository: FollowRequestsRepository, + + utilityService: UtilityService, + systemAccountService: SystemAccountService, + apRequestService: ApRequestService, + httpRequestService: HttpRequestService, + apRendererService: ApRendererService, + apDbResolverService: ApDbResolverService, + loggerService: LoggerService, + apLogService: ApLogService, + apUtilityService: ApUtilityService, + cacheService: CacheService, + ) { + super( + config, + meta, + usersRepository, + notesRepository, + pollsRepository, + noteReactionsRepository, + followRequestsRepository, + utilityService, + systemAccountService, + apRequestService, + httpRequestService, + apRendererService, + apDbResolverService, + loggerService, + apLogService, + apUtilityService, + cacheService, + ); + + this.resolver = new MockResolver( + this.config, + this.meta, + this.usersRepository, + this.notesRepository, + this.pollsRepository, + this.noteReactionsRepository, + this.followRequestsRepository, + this.utilityService, + this.systemAccountService, + this.apRequestService, + this.httpRequestService, + this.apRendererService, + this.apDbResolverService, + this.loggerService, + this.apLogService, + this.apUtilityService, + this.cacheService, + ); + } + + /** + * Resets the mock to initial state. + */ + @bindThis + reset() { + this.resolver.clear(); + } + + @bindThis + createResolver(): MockResolver { + return this.resolver; + } +}