import { Logger } from '../../../core/shared/domain/Logger'; import { InMemoryDriverRepository } from '../../../adapters/racing/persistence/inmemory/InMemoryDriverRepository'; import { InMemoryTeamRepository } from '../../../adapters/racing/persistence/inmemory/InMemoryTeamRepository'; import { InMemoryTeamMembershipRepository } from '../../../adapters/racing/persistence/inmemory/InMemoryTeamMembershipRepository'; import { InMemorySocialGraphRepository } from '../../../adapters/social/persistence/inmemory/InMemorySocialAndFeed'; import { InMemoryDriverExtendedProfileProvider } from '../../../adapters/racing/ports/InMemoryDriverExtendedProfileProvider'; import { InMemoryDriverStatsRepository } from '../../../adapters/racing/persistence/inmemory/InMemoryDriverStatsRepository'; import { GetProfileOverviewUseCase } from '../../../core/racing/application/use-cases/GetProfileOverviewUseCase'; import { UpdateDriverProfileUseCase } from '../../../core/racing/application/use-cases/UpdateDriverProfileUseCase'; import { DriverStatsUseCase } from '../../../core/racing/application/use-cases/DriverStatsUseCase'; import { RankingUseCase } from '../../../core/racing/application/use-cases/RankingUseCase'; import { GetDriversLeaderboardUseCase } from '../../../core/racing/application/use-cases/GetDriversLeaderboardUseCase'; import { GetDriverUseCase } from '../../../core/racing/application/use-cases/GetDriverUseCase'; export class DriversTestContext { public readonly logger: Logger; public readonly driverRepository: InMemoryDriverRepository; public readonly teamRepository: InMemoryTeamRepository; public readonly teamMembershipRepository: InMemoryTeamMembershipRepository; public readonly socialRepository: InMemorySocialGraphRepository; public readonly driverExtendedProfileProvider: InMemoryDriverExtendedProfileProvider; public readonly driverStatsRepository: InMemoryDriverStatsRepository; public readonly driverStatsUseCase: DriverStatsUseCase; public readonly rankingUseCase: RankingUseCase; public readonly getProfileOverviewUseCase: GetProfileOverviewUseCase; public readonly updateDriverProfileUseCase: UpdateDriverProfileUseCase; public readonly getDriversLeaderboardUseCase: GetDriversLeaderboardUseCase; public readonly getDriverUseCase: GetDriverUseCase; private constructor() { this.logger = { info: () => {}, debug: () => {}, warn: () => {}, error: () => {}, } as unknown as Logger; this.driverRepository = new InMemoryDriverRepository(this.logger); this.teamRepository = new InMemoryTeamRepository(this.logger); this.teamMembershipRepository = new InMemoryTeamMembershipRepository(this.logger); this.socialRepository = new InMemorySocialGraphRepository(this.logger); this.driverExtendedProfileProvider = new InMemoryDriverExtendedProfileProvider(this.logger); this.driverStatsRepository = new InMemoryDriverStatsRepository(this.logger); this.driverStatsUseCase = new DriverStatsUseCase( {} as any, {} as any, this.driverStatsRepository, this.logger ); this.rankingUseCase = new RankingUseCase( {} as any, {} as any, this.driverStatsRepository, this.logger ); this.getProfileOverviewUseCase = new GetProfileOverviewUseCase( this.driverRepository, this.teamRepository, this.teamMembershipRepository, this.socialRepository, this.driverExtendedProfileProvider, this.driverStatsUseCase, this.rankingUseCase ); this.updateDriverProfileUseCase = new UpdateDriverProfileUseCase( this.driverRepository, this.logger ); this.getDriversLeaderboardUseCase = new GetDriversLeaderboardUseCase( this.driverRepository, this.rankingUseCase, this.driverStatsUseCase, this.logger ); this.getDriverUseCase = new GetDriverUseCase(this.driverRepository); } public static create(): DriversTestContext { return new DriversTestContext(); } public clear(): void { this.driverRepository.clear(); this.teamRepository.clear(); this.teamMembershipRepository.clear(); this.socialRepository.clear(); this.driverExtendedProfileProvider.clear(); this.driverStatsRepository.clear(); } }