Files
gridpilot.gg/core/racing/application/use-cases/DriverStatsUseCase.test.ts
2026-01-22 18:05:30 +01:00

58 lines
1.9 KiB
TypeScript

import { describe, it, expect, vi } from 'vitest';
import { DriverStatsUseCase, type DriverStats } from './DriverStatsUseCase';
import type { ResultRepository } from '../../domain/repositories/ResultRepository';
import type { StandingRepository } from '../../domain/repositories/StandingRepository';
import type { DriverStatsRepository } from '../../domain/repositories/DriverStatsRepository';
import type { Logger } from '@core/shared/domain/Logger';
describe('DriverStatsUseCase', () => {
const mockResultRepository = {} as ResultRepository;
const mockStandingRepository = {} as StandingRepository;
const mockDriverStatsRepository = {
getDriverStats: vi.fn(),
} as unknown as DriverStatsRepository;
const mockLogger = {
debug: vi.fn(),
} as unknown as Logger;
const useCase = new DriverStatsUseCase(
mockResultRepository,
mockStandingRepository,
mockDriverStatsRepository,
mockLogger
);
it('should return driver stats when found', async () => {
const mockStats: DriverStats = {
rating: 1500,
safetyRating: 4.5,
sportsmanshipRating: 4.8,
totalRaces: 10,
wins: 2,
podiums: 5,
dnfs: 0,
avgFinish: 3.5,
bestFinish: 1,
worstFinish: 8,
consistency: 0.9,
experienceLevel: 'Intermediate',
overallRank: 42,
};
vi.mocked(mockDriverStatsRepository.getDriverStats).mockResolvedValue(mockStats);
const result = await useCase.getDriverStats('driver-1');
expect(result).toEqual(mockStats);
expect(mockLogger.debug).toHaveBeenCalledWith('Getting stats for driver driver-1');
expect(mockDriverStatsRepository.getDriverStats).toHaveBeenCalledWith('driver-1');
});
it('should return null when stats are not found', async () => {
vi.mocked(mockDriverStatsRepository.getDriverStats).mockResolvedValue(null);
const result = await useCase.getDriverStats('non-existent');
expect(result).toBeNull();
});
});