import { InMemoryLeaderboardsRepository } from '../../../adapters/leaderboards/persistence/inmemory/InMemoryLeaderboardsRepository'; import { InMemoryLeaderboardsEventPublisher } from '../../../adapters/leaderboards/events/InMemoryLeaderboardsEventPublisher'; import { GetDriverRankingsUseCase } from '../../../core/leaderboards/application/use-cases/GetDriverRankingsUseCase'; import { GetTeamRankingsUseCase } from '../../../core/leaderboards/application/use-cases/GetTeamRankingsUseCase'; import { GetGlobalLeaderboardsUseCase } from '../../../core/leaderboards/application/use-cases/GetGlobalLeaderboardsUseCase'; export class LeaderboardsTestContext { public readonly repository: InMemoryLeaderboardsRepository; public readonly eventPublisher: InMemoryLeaderboardsEventPublisher; public readonly getDriverRankingsUseCase: GetDriverRankingsUseCase; public readonly getTeamRankingsUseCase: GetTeamRankingsUseCase; public readonly getGlobalLeaderboardsUseCase: GetGlobalLeaderboardsUseCase; constructor() { this.repository = new InMemoryLeaderboardsRepository(); this.eventPublisher = new InMemoryLeaderboardsEventPublisher(); const dependencies = { leaderboardsRepository: this.repository, eventPublisher: this.eventPublisher, }; this.getDriverRankingsUseCase = new GetDriverRankingsUseCase(dependencies); this.getTeamRankingsUseCase = new GetTeamRankingsUseCase(dependencies); this.getGlobalLeaderboardsUseCase = new GetGlobalLeaderboardsUseCase(dependencies); } clear(): void { this.repository.clear(); this.eventPublisher.clear(); } static create(): LeaderboardsTestContext { return new LeaderboardsTestContext(); } }