import { InMemoryDriverRepository } from '../../../adapters/racing/persistence/inmemory/InMemoryDriverRepository'; import { InMemoryRaceRepository } from '../../../adapters/racing/persistence/inmemory/InMemoryRaceRepository'; import { InMemoryLeagueRepository } from '../../../adapters/racing/persistence/inmemory/InMemoryLeagueRepository'; import { InMemoryResultRepository } from '../../../adapters/racing/persistence/inmemory/InMemoryResultRepository'; import { InMemoryRatingRepository } from '../../../adapters/rating/persistence/inmemory/InMemoryRatingRepository'; import { InMemoryEventPublisher } from '../../../adapters/events/InMemoryEventPublisher'; import { ConsoleLogger } from '../../../adapters/logging/ConsoleLogger'; 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() { const logger = new ConsoleLogger(); this.driverRepository = new InMemoryDriverRepository(logger); this.raceRepository = new InMemoryRaceRepository(logger); this.leagueRepository = new InMemoryLeagueRepository(logger); this.resultRepository = new InMemoryResultRepository(logger); 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(); } }