Files
gridpilot.gg/apps/website/lib/services/ServiceFactory.test.ts
2025-12-17 22:17:02 +01:00

517 lines
13 KiB
TypeScript

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);
});
});