Files
gridpilot.gg/tests/integration/leaderboards/driver-rankings/driver-rankings-edge-cases.test.ts
Marc Mintel 09632d004d
Some checks failed
CI / lint-typecheck (pull_request) Failing after 12s
CI / tests (pull_request) Has been skipped
CI / contract-tests (pull_request) Has been skipped
CI / e2e-tests (pull_request) Has been skipped
CI / comment-pr (pull_request) Has been skipped
CI / commit-types (pull_request) Has been skipped
code quality
2026-01-26 22:16:33 +01:00

87 lines
3.6 KiB
TypeScript

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