import { InMemoryDriverRepository } from '../../../../core/racing/infrastructure/repositories/InMemoryDriverRepository'; import { InMemoryRaceRepository } from '../../../../core/racing/infrastructure/repositories/InMemoryRaceRepository'; import { InMemoryLeagueRepository } from '../../../../core/racing/infrastructure/repositories/InMemoryLeagueRepository'; import { InMemoryResultRepository } from '../../../../core/racing/infrastructure/repositories/InMemoryResultRepository'; import { InMemoryRatingRepository } from '../../../../core/rating/infrastructure/repositories/InMemoryRatingRepository'; import { InMemoryEventPublisher } from '../../../../adapters/events/InMemoryEventPublisher'; export class RatingTestContext { private static instance: RatingTestContext; public readonly driverRepository: InMemoryDriverRepository; public readonly raceRepository: InMemoryRaceRepository; public readonly leagueRepository: InMemoryLeagueRepository; public readonly resultRepository: InMemoryResultRepository; public readonly ratingRepository: InMemoryRatingRepository; public readonly eventPublisher: InMemoryEventPublisher; private constructor() { this.driverRepository = new InMemoryDriverRepository(); this.raceRepository = new InMemoryRaceRepository(); this.leagueRepository = new InMemoryLeagueRepository(); this.resultRepository = new InMemoryResultRepository(); this.ratingRepository = new InMemoryRatingRepository(); this.eventPublisher = new InMemoryEventPublisher(); } public static create(): RatingTestContext { if (!RatingTestContext.instance) { RatingTestContext.instance = new RatingTestContext(); } return RatingTestContext.instance; } public async clear(): Promise { await this.driverRepository.clear(); await this.raceRepository.clear(); await this.leagueRepository.clear(); await this.resultRepository.clear(); await this.ratingRepository.clear(); this.eventPublisher.clear(); } }