import { Logger } from '../../../core/shared/domain/Logger'; import { InMemoryTeamRepository } from '../../../adapters/racing/persistence/inmemory/InMemoryTeamRepository'; import { InMemoryTeamMembershipRepository } from '../../../adapters/racing/persistence/inmemory/InMemoryTeamMembershipRepository'; import { InMemoryDriverRepository } from '../../../adapters/racing/persistence/inmemory/InMemoryDriverRepository'; import { InMemoryTeamStatsRepository } from '../../../adapters/racing/persistence/inmemory/InMemoryTeamStatsRepository'; import { CreateTeamUseCase } from '../../../core/racing/application/use-cases/CreateTeamUseCase'; import { JoinTeamUseCase } from '../../../core/racing/application/use-cases/JoinTeamUseCase'; import { LeaveTeamUseCase } from '../../../core/racing/application/use-cases/LeaveTeamUseCase'; import { GetTeamMembershipUseCase } from '../../../core/racing/application/use-cases/GetTeamMembershipUseCase'; import { GetTeamMembersUseCase } from '../../../core/racing/application/use-cases/GetTeamMembersUseCase'; import { GetTeamJoinRequestsUseCase } from '../../../core/racing/application/use-cases/GetTeamJoinRequestsUseCase'; import { ApproveTeamJoinRequestUseCase } from '../../../core/racing/application/use-cases/ApproveTeamJoinRequestUseCase'; import { UpdateTeamUseCase } from '../../../core/racing/application/use-cases/UpdateTeamUseCase'; import { GetTeamDetailsUseCase } from '../../../core/racing/application/use-cases/GetTeamDetailsUseCase'; import { GetTeamsLeaderboardUseCase } from '../../../core/racing/application/use-cases/GetTeamsLeaderboardUseCase'; import { GetAllTeamsUseCase } from '../../../core/racing/application/use-cases/GetAllTeamsUseCase'; export class TeamsTestContext { public readonly logger: Logger; public readonly teamRepository: InMemoryTeamRepository; public readonly membershipRepository: InMemoryTeamMembershipRepository; public readonly driverRepository: InMemoryDriverRepository; public readonly statsRepository: InMemoryTeamStatsRepository; constructor() { this.logger = { info: () => {}, debug: () => {}, warn: () => {}, error: () => {}, } as unknown as Logger; this.teamRepository = new InMemoryTeamRepository(this.logger); this.membershipRepository = new InMemoryTeamMembershipRepository(this.logger); this.driverRepository = new InMemoryDriverRepository(this.logger); this.statsRepository = new InMemoryTeamStatsRepository(this.logger); } public clear(): void { this.teamRepository.clear(); this.membershipRepository.clear(); this.driverRepository.clear(); this.statsRepository.clear(); } public createCreateTeamUseCase(): CreateTeamUseCase { return new CreateTeamUseCase(this.teamRepository, this.membershipRepository, this.logger); } public createJoinTeamUseCase(): JoinTeamUseCase { return new JoinTeamUseCase(this.teamRepository, this.membershipRepository, this.logger); } public createLeaveTeamUseCase(): LeaveTeamUseCase { return new LeaveTeamUseCase(this.teamRepository, this.membershipRepository, this.logger); } public createGetTeamMembershipUseCase(): GetTeamMembershipUseCase { return new GetTeamMembershipUseCase(this.membershipRepository, this.logger); } public createGetTeamMembersUseCase(): GetTeamMembersUseCase { return new GetTeamMembersUseCase(this.membershipRepository, this.driverRepository, this.teamRepository, this.logger); } public createGetTeamJoinRequestsUseCase(): GetTeamJoinRequestsUseCase { return new GetTeamJoinRequestsUseCase(this.membershipRepository, this.driverRepository, this.teamRepository); } public createApproveTeamJoinRequestUseCase(): ApproveTeamJoinRequestUseCase { return new ApproveTeamJoinRequestUseCase(this.membershipRepository); } public createUpdateTeamUseCase(): UpdateTeamUseCase { return new UpdateTeamUseCase(this.teamRepository, this.membershipRepository); } public createGetTeamDetailsUseCase(): GetTeamDetailsUseCase { return new GetTeamDetailsUseCase(this.teamRepository, this.membershipRepository); } public createGetTeamsLeaderboardUseCase(getDriverStats: (driverId: string) => any): GetTeamsLeaderboardUseCase { return new GetTeamsLeaderboardUseCase( this.teamRepository, this.membershipRepository, getDriverStats, this.logger ); } public createGetAllTeamsUseCase(): GetAllTeamsUseCase { return new GetAllTeamsUseCase(this.teamRepository, this.membershipRepository, this.statsRepository, this.logger); } }