Files
gridpilot.gg/core/racing/application/use-cases/GetProfileOverviewUseCase.test.ts
2026-01-16 16:46:57 +01:00

112 lines
3.1 KiB
TypeScript

import { describe, it, expect, beforeEach, vi, type Mock } from 'vitest';
import {
GetProfileOverviewUseCase,
type GetProfileOverviewResult,
} from './GetProfileOverviewUseCase';
import { DriverRepository } from '../../domain/repositories/DriverRepository';
import { TeamRepository } from '../../domain/repositories/TeamRepository';
import { TeamMembershipRepository } from '../../domain/repositories/TeamMembershipRepository';
import { SocialGraphRepository } from '@core/social/domain/repositories/SocialGraphRepository';
import { Driver } from '../../domain/entities/Driver';
describe('GetProfileOverviewUseCase', () => {
let useCase: GetProfileOverviewUseCase;
let driverRepository: {
findById: Mock;
};
let teamRepository: {
findAll: Mock;
};
let teamMembershipRepository: {
getMembership: Mock;
};
let socialRepository: {
getFriends: Mock;
};
let driverStatsUseCase: {
getDriverStats: Mock;
};
let rankingUseCase: {
getAllDriverRankings: Mock;
};
let driverExtendedProfileProvider: {
getExtendedProfile: Mock;
};
beforeEach(() => {
driverRepository = {
findById: vi.fn(),
};
teamRepository = {
findAll: vi.fn(),
};
teamMembershipRepository = {
getMembership: vi.fn(),
};
socialRepository = {
getFriends: vi.fn(),
};
driverStatsUseCase = {
getDriverStats: vi.fn(),
};
rankingUseCase = {
getAllDriverRankings: vi.fn(),
};
driverExtendedProfileProvider = {
getExtendedProfile: vi.fn(),
};
useCase = new GetProfileOverviewUseCase(driverRepository as unknown as DriverRepository,
teamRepository as unknown as TeamRepository,
teamMembershipRepository as unknown as TeamMembershipRepository,
socialRepository as unknown as SocialGraphRepository,
driverExtendedProfileProvider,
driverStatsUseCase as unknown as any,
rankingUseCase as unknown as any);
});
it('should return profile overview for existing driver', async () => {
const driverId = 'driver-1';
const driver = Driver.create({
id: driverId,
iracingId: '12345',
name: 'Test Driver',
country: 'US',
joinedAt: new Date('2023-01-01'),
});
driverRepository.findById.mockResolvedValue(driver);
driverStatsUseCase.getDriverStats.mockResolvedValue({
rating: 1500,
wins: 5,
podiums: 10,
dnfs: 2,
totalRaces: 20,
avgFinish: 8.5,
bestFinish: 1,
worstFinish: 15,
overallRank: 50,
consistency: 85,
});
rankingUseCase.getAllDriverRankings.mockResolvedValue([
{ driverId: 'driver-1', rating: 1500, wins: 5, totalRaces: 20, overallRank: 50 },
{ driverId: 'driver-2', rating: 1400, wins: 3, totalRaces: 18, overallRank: 75 },
]);
teamRepository.findAll.mockResolvedValue([]);
socialRepository.getFriends.mockResolvedValue([]);
driverExtendedProfileProvider.getExtendedProfile.mockReturnValue({
bio: 'Test bio',
location: 'Test location',
favoriteTrack: 'Test track',
});
const result = await useCase.execute({ driverId });
expect(result.isOk()).toBe(true);
});
});