import { describe, it, expect, vi, beforeEach } from 'vitest'; import { ServiceFactory } from './ServiceFactory'; // Mock API clients vi.mock('../api/races/RacesApiClient', () => ({ RacesApiClient: class { constructor(baseUrl: string) { this.baseUrl = baseUrl; } }, })); vi.mock('../api/drivers/DriversApiClient', () => ({ DriversApiClient: class { constructor(baseUrl: string) { this.baseUrl = baseUrl; } }, })); vi.mock('../api/teams/TeamsApiClient', () => ({ TeamsApiClient: class { constructor(baseUrl: string) { this.baseUrl = baseUrl; } }, })); vi.mock('../api/leagues/LeaguesApiClient', () => ({ LeaguesApiClient: class { constructor(baseUrl: string) { this.baseUrl = baseUrl; } }, })); vi.mock('../api/sponsors/SponsorsApiClient', () => ({ SponsorsApiClient: class { constructor(baseUrl: string) { this.baseUrl = baseUrl; } }, })); vi.mock('../api/payments/PaymentsApiClient', () => ({ PaymentsApiClient: class { constructor(baseUrl: string) { this.baseUrl = baseUrl; } }, })); vi.mock('../api/auth/AuthApiClient', () => ({ AuthApiClient: class { constructor(baseUrl: string) { this.baseUrl = baseUrl; } }, })); vi.mock('../api/analytics/AnalyticsApiClient', () => ({ AnalyticsApiClient: class { constructor(baseUrl: string) { this.baseUrl = baseUrl; } }, })); vi.mock('../api/media/MediaApiClient', () => ({ MediaApiClient: class { constructor(baseUrl: string) { this.baseUrl = baseUrl; } }, })); // Mock presenters vi.mock('../presenters/RaceDetailPresenter', () => ({ RaceDetailPresenter: class {}, })); vi.mock('../presenters/RaceResultsDetailPresenter', () => ({ RaceResultsDetailPresenter: class {}, })); vi.mock('../presenters/RaceWithSOFPresenter', () => ({ RaceWithSOFPresenter: class {}, })); vi.mock('../presenters/ImportRaceResultsPresenter', () => ({ ImportRaceResultsPresenter: class {}, })); vi.mock('../presenters/DriversLeaderboardPresenter', () => ({ DriversLeaderboardPresenter: class {}, })); vi.mock('../presenters/DriverPresenter', () => ({ DriverPresenter: class {}, })); vi.mock('../presenters/CompleteOnboardingPresenter', () => ({ CompleteOnboardingPresenter: class {}, })); vi.mock('../presenters/DriverRegistrationStatusPresenter', () => ({ DriverRegistrationStatusPresenter: class {}, })); vi.mock('../presenters/TeamDetailsPresenter', () => ({ TeamDetailsPresenter: class {}, })); vi.mock('../presenters/TeamListPresenter', () => ({ TeamListPresenter: class {}, })); vi.mock('../presenters/TeamMembersPresenter', () => ({ TeamMembersPresenter: class {}, })); vi.mock('../presenters/TeamJoinRequestPresenter', () => ({ TeamJoinRequestPresenter: class {}, })); vi.mock('../presenters/LeagueSummaryPresenter', () => ({ LeagueSummaryPresenter: class {}, })); vi.mock('../presenters/LeagueStandingsPresenter', () => ({ LeagueStandingsPresenter: class {}, })); vi.mock('../presenters/LeagueMembersPresenter', () => ({ LeagueMembersPresenter: class {}, })); vi.mock('../presenters/SponsorListPresenter', () => ({ SponsorListPresenter: class {}, })); vi.mock('../presenters/SponsorDashboardPresenter', () => ({ SponsorDashboardPresenter: class {}, })); vi.mock('../presenters/SponsorSponsorshipsPresenter', () => ({ SponsorSponsorshipsPresenter: class {}, })); vi.mock('../presenters/SponsorshipPricingPresenter', () => ({ SponsorshipPricingPresenter: class {}, })); vi.mock('../presenters/PaymentListPresenter', () => ({ PaymentListPresenter: class {}, })); vi.mock('../presenters/AnalyticsDashboardPresenter', () => ({ AnalyticsDashboardPresenter: class {}, })); vi.mock('../presenters/AnalyticsMetricsPresenter', () => ({ AnalyticsMetricsPresenter: class {}, })); vi.mock('../presenters/MediaPresenter', () => ({ MediaPresenter: class {}, })); vi.mock('../presenters/AvatarPresenter', () => ({ AvatarPresenter: class {}, })); vi.mock('../presenters/SessionPresenter', () => ({ SessionPresenter: class {}, })); vi.mock('../presenters/AnalyticsDashboardPresenter', () => ({ AnalyticsDashboardPresenter: class {}, })); vi.mock('../presenters/AnalyticsMetricsPresenter', () => ({ AnalyticsMetricsPresenter: class {}, })); vi.mock('../presenters/MediaPresenter', () => ({ MediaPresenter: class {}, })); vi.mock('../presenters/AvatarPresenter', () => ({ AvatarPresenter: class {}, })); vi.mock('../presenters/SessionPresenter', () => ({ SessionPresenter: class {}, })); vi.mock('../presenters', () => ({ presentPayment: vi.fn(), presentMembershipFee: vi.fn(), presentPrize: vi.fn(), presentWallet: vi.fn(), })); // Mock services vi.mock('./races/RaceService', () => ({ RaceService: class { constructor(...args: any[]) { return { type: 'RaceService', args }; } }, })); vi.mock('./races/RaceResultsService', () => ({ RaceResultsService: class { constructor(...args: any[]) { return { type: 'RaceResultsService', args }; } }, })); vi.mock('./drivers/DriverService', () => ({ DriverService: class { constructor(...args: any[]) { return { type: 'DriverService', args }; } }, })); vi.mock('./drivers/DriverRegistrationService', () => ({ DriverRegistrationService: class { constructor(...args: any[]) { return { type: 'DriverRegistrationService', args }; } }, })); vi.mock('./teams/TeamService', () => ({ TeamService: class { constructor(...args: any[]) { return { type: 'TeamService', args }; } }, })); vi.mock('./teams/TeamJoinService', () => ({ TeamJoinService: class { constructor(...args: any[]) { return { type: 'TeamJoinService', args }; } }, })); vi.mock('./leagues/LeagueService', () => ({ LeagueService: class { constructor(...args: any[]) { return { type: 'LeagueService', args }; } }, })); vi.mock('./leagues/LeagueMembershipService', () => ({ LeagueMembershipService: class { constructor(...args: any[]) { return { type: 'LeagueMembershipService', args }; } }, })); vi.mock('./sponsors/SponsorService', () => ({ SponsorService: class { constructor(...args: any[]) { return { type: 'SponsorService', args }; } }, })); vi.mock('./sponsors/SponsorshipService', () => ({ SponsorshipService: class { constructor(...args: any[]) { return { type: 'SponsorshipService', args }; } }, })); vi.mock('./payments/PaymentService', () => ({ PaymentService: class { constructor(...args: any[]) { return { type: 'PaymentService', args }; } }, })); vi.mock('./analytics/AnalyticsService', () => ({ AnalyticsService: class { constructor(...args: any[]) { return { type: 'AnalyticsService', args }; } }, })); vi.mock('./analytics/DashboardService', () => ({ DashboardService: class { constructor(...args: any[]) { return { type: 'DashboardService', args }; } }, })); vi.mock('./media/MediaService', () => ({ MediaService: class { constructor(...args: any[]) { return { type: 'MediaService', args }; } }, })); vi.mock('./media/AvatarService', () => ({ AvatarService: class { constructor(...args: any[]) { return { type: 'AvatarService', args }; } }, })); vi.mock('./payments/WalletService', () => ({ WalletService: class { constructor(...args: any[]) { return { type: 'WalletService', args }; } }, })); vi.mock('./payments/MembershipFeeService', () => ({ MembershipFeeService: class { constructor(...args: any[]) { return { type: 'MembershipFeeService', args }; } }, })); vi.mock('./auth/AuthService', () => ({ AuthService: class { constructor(...args: any[]) { return { type: 'AuthService', args }; } }, })); vi.mock('./auth/SessionService', () => ({ SessionService: class { constructor(...args: any[]) { return { type: 'SessionService', args }; } }, })); describe('ServiceFactory', () => { let factory: ServiceFactory; beforeEach(() => { vi.clearAllMocks(); factory = new ServiceFactory('http://test-api.com'); }); it('should create RaceService with correct dependencies', () => { const service = factory.createRaceService(); expect(service).toBeDefined(); expect(service.type).toBe('RaceService'); expect(service.args).toHaveLength(2); }); it('should create RaceResultsService with correct dependencies', () => { const service = factory.createRaceResultsService(); expect(service).toBeDefined(); expect(service.type).toBe('RaceResultsService'); expect(service.args).toHaveLength(4); }); it('should create DriverService with correct dependencies', () => { const service = factory.createDriverService(); expect(service).toBeDefined(); expect(service.type).toBe('DriverService'); expect(service.args).toHaveLength(4); }); it('should create DriverRegistrationService with correct dependencies', () => { const service = factory.createDriverRegistrationService(); expect(service).toBeDefined(); expect(service.type).toBe('DriverRegistrationService'); expect(service.args).toHaveLength(2); }); it('should create TeamService with correct dependencies', () => { const service = factory.createTeamService(); expect(service).toBeDefined(); expect(service.type).toBe('TeamService'); expect(service.args).toHaveLength(4); }); it('should create TeamJoinService with correct dependencies', () => { const service = factory.createTeamJoinService(); expect(service).toBeDefined(); expect(service.type).toBe('TeamJoinService'); expect(service.args).toHaveLength(2); }); it('should create LeagueService with correct dependencies', () => { const service = factory.createLeagueService(); expect(service).toBeDefined(); expect(service.type).toBe('LeagueService'); expect(service.args).toHaveLength(3); }); it('should create LeagueMembershipService with correct dependencies', () => { const service = factory.createLeagueMembershipService(); expect(service).toBeDefined(); expect(service.type).toBe('LeagueMembershipService'); expect(service.args).toHaveLength(2); }); it('should create SponsorService with correct dependencies', () => { const service = factory.createSponsorService(); expect(service).toBeDefined(); expect(service.type).toBe('SponsorService'); expect(service.args).toHaveLength(4); }); it('should create SponsorshipService with correct dependencies', () => { const service = factory.createSponsorshipService(); expect(service).toBeDefined(); expect(service.type).toBe('SponsorshipService'); expect(service.args).toHaveLength(3); }); it('should create PaymentService with correct dependencies', () => { const service = factory.createPaymentService(); expect(service).toBeDefined(); expect(service.type).toBe('PaymentService'); expect(service.args).toHaveLength(6); }); it('should create AnalyticsService with correct dependencies', () => { const service = factory.createAnalyticsService(); expect(service).toBeDefined(); expect(service.type).toBe('AnalyticsService'); expect(service.args).toHaveLength(1); }); it('should create DashboardService with correct dependencies', () => { const service = factory.createDashboardService(); expect(service).toBeDefined(); expect(service.type).toBe('DashboardService'); expect(service.args).toHaveLength(3); }); it('should create MediaService with correct dependencies', () => { const service = factory.createMediaService(); expect(service).toBeDefined(); expect(service.type).toBe('MediaService'); expect(service.args).toHaveLength(2); }); it('should create AvatarService with correct dependencies', () => { const service = factory.createAvatarService(); expect(service).toBeDefined(); expect(service.type).toBe('AvatarService'); expect(service.args).toHaveLength(2); }); it('should create WalletService with correct dependencies', () => { const service = factory.createWalletService(); expect(service).toBeDefined(); expect(service.type).toBe('WalletService'); expect(service.args).toHaveLength(1); }); it('should create MembershipFeeService with correct dependencies', () => { const service = factory.createMembershipFeeService(); expect(service).toBeDefined(); expect(service.type).toBe('MembershipFeeService'); expect(service.args).toHaveLength(1); }); it('should create AuthService with correct dependencies', () => { const service = factory.createAuthService(); expect(service).toBeDefined(); expect(service.type).toBe('AuthService'); expect(service.args).toHaveLength(1); }); it('should create SessionService with correct dependencies', () => { const service = factory.createSessionService(); expect(service).toBeDefined(); expect(service.type).toBe('SessionService'); expect(service.args).toHaveLength(2); }); });