517 lines
13 KiB
TypeScript
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);
|
|
});
|
|
}); |