import { describe, it, expect, beforeEach } from 'vitest'; import { LeaderboardsTestContext } from '../LeaderboardsTestContext'; import { ValidationError } from '../../../../core/shared/errors/ValidationError'; describe('GetDriverRankingsUseCase - Edge Cases & Errors', () => { let context: LeaderboardsTestContext; beforeEach(() => { context = LeaderboardsTestContext.create(); context.clear(); }); describe('Edge Cases', () => { it('should handle system with no drivers', async () => { const result = await context.getDriverRankingsUseCase.execute({}); expect(result.drivers).toHaveLength(0); expect(context.eventPublisher.getDriverRankingsAccessedEventCount()).toBe(1); }); it('should handle drivers with same rating', async () => { context.repository.addDriver({ id: 'driver-1', name: 'Zoe', rating: 5.0, raceCount: 50 }); context.repository.addDriver({ id: 'driver-2', name: 'Alice', rating: 5.0, raceCount: 45 }); context.repository.addDriver({ id: 'driver-3', name: 'Bob', rating: 5.0, raceCount: 40 }); const result = await context.getDriverRankingsUseCase.execute({}); expect(result.drivers[0]!.rating).toBe(5.0); expect(result.drivers[1]!.rating).toBe(5.0); expect(result.drivers[2]!.rating).toBe(5.0); expect(result.drivers[0]!.name).toBe('Alice'); expect(result.drivers[1]!.name).toBe('Bob'); expect(result.drivers[2]!.name).toBe('Zoe'); expect(context.eventPublisher.getDriverRankingsAccessedEventCount()).toBe(1); }); it('should handle drivers with no team affiliation', async () => { context.repository.addDriver({ id: 'driver-1', name: 'Driver A', rating: 5.0, teamId: 'team-1', teamName: 'Team 1', raceCount: 10 }); context.repository.addDriver({ id: 'driver-2', name: 'Driver B', rating: 4.8, raceCount: 10 }); const result = await context.getDriverRankingsUseCase.execute({}); expect(result.drivers).toHaveLength(2); expect(result.drivers[0]!.teamId).toBe('team-1'); expect(result.drivers[1]!.teamId).toBeUndefined(); expect(context.eventPublisher.getDriverRankingsAccessedEventCount()).toBe(1); }); it('should handle pagination with empty results', async () => { const result = await context.getDriverRankingsUseCase.execute({ page: 1, limit: 20 }); expect(result.drivers).toHaveLength(0); expect(result.pagination.total).toBe(0); expect(result.pagination.totalPages).toBe(0); expect(context.eventPublisher.getDriverRankingsAccessedEventCount()).toBe(1); }); }); describe('Error Handling', () => { it('should handle driver repository errors gracefully', async () => { const originalFindAllDrivers = context.repository.findAllDrivers.bind(context.repository); context.repository.findAllDrivers = async () => { throw new Error('Repository error'); }; try { await context.getDriverRankingsUseCase.execute({}); expect(true).toBe(false); } catch (error) { expect(error).toBeInstanceOf(Error); expect((error as Error).message).toBe('Repository error'); } expect(context.eventPublisher.getDriverRankingsAccessedEventCount()).toBe(0); context.repository.findAllDrivers = originalFindAllDrivers; }); it('should handle invalid query parameters', async () => { try { await context.getDriverRankingsUseCase.execute({ page: -1 }); expect(true).toBe(false); } catch (error) { expect(error).toBeInstanceOf(ValidationError); } expect(context.eventPublisher.getDriverRankingsAccessedEventCount()).toBe(0); }); }); });