Files
gridpilot.gg/tests/integration/leaderboards/driver-rankings/driver-rankings-success.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

133 lines
4.3 KiB
TypeScript

import { describe, it, expect, beforeEach } from 'vitest';
import { LeaderboardsTestContext } from '../LeaderboardsTestContext';
describe('GetDriverRankingsUseCase - Success Path', () => {
let context: LeaderboardsTestContext;
beforeEach(() => {
context = LeaderboardsTestContext.create();
context.clear();
});
it('should retrieve all drivers with complete data', async () => {
context.repository.addDriver({
id: 'driver-1',
name: 'John Smith',
rating: 5.0,
teamId: 'team-1',
teamName: 'Racing Team A',
raceCount: 50,
});
context.repository.addDriver({
id: 'driver-2',
name: 'Jane Doe',
rating: 4.8,
teamId: 'team-2',
teamName: 'Speed Squad',
raceCount: 45,
});
context.repository.addDriver({
id: 'driver-3',
name: 'Bob Johnson',
rating: 4.5,
teamId: 'team-1',
teamName: 'Racing Team A',
raceCount: 40,
});
const result = await context.getDriverRankingsUseCase.execute({});
expect(result.drivers).toHaveLength(3);
expect(result.drivers[0]).toMatchObject({
rank: 1,
id: 'driver-1',
name: 'John Smith',
rating: 5.0,
teamId: 'team-1',
teamName: 'Racing Team A',
raceCount: 50,
});
expect(result.drivers[0]!.rating).toBe(5.0);
expect(result.drivers[1]!.rating).toBe(4.8);
expect(result.drivers[2]!.rating).toBe(4.5);
expect(context.eventPublisher.getDriverRankingsAccessedEventCount()).toBe(1);
});
it('should retrieve drivers with pagination', async () => {
for (let i = 1; i <= 25; i++) {
context.repository.addDriver({
id: `driver-${i}`,
name: `Driver ${i}`,
rating: 5.0 - i * 0.1,
raceCount: 10 + i,
});
}
const result = await context.getDriverRankingsUseCase.execute({ page: 1, limit: 20 });
expect(result.drivers).toHaveLength(20);
expect(result.pagination.total).toBe(25);
expect(result.pagination.page).toBe(1);
expect(result.pagination.limit).toBe(20);
expect(result.pagination.totalPages).toBe(2);
expect(context.eventPublisher.getDriverRankingsAccessedEventCount()).toBe(1);
});
it('should retrieve drivers with different page sizes', async () => {
for (let i = 1; i <= 60; i++) {
context.repository.addDriver({
id: `driver-${i}`,
name: `Driver ${i}`,
rating: 5.0 - i * 0.1,
raceCount: 10 + i,
});
}
const result = await context.getDriverRankingsUseCase.execute({ limit: 50 });
expect(result.drivers).toHaveLength(50);
expect(context.eventPublisher.getDriverRankingsAccessedEventCount()).toBe(1);
});
it('should retrieve drivers with consistent ranking order', async () => {
context.repository.addDriver({ id: 'driver-1', name: 'Driver A', rating: 5.0, raceCount: 10 });
context.repository.addDriver({ id: 'driver-2', name: 'Driver B', rating: 4.8, raceCount: 10 });
context.repository.addDriver({ id: 'driver-3', name: 'Driver C', rating: 4.5, raceCount: 10 });
const result = await context.getDriverRankingsUseCase.execute({});
expect(result.drivers[0].rank).toBe(1);
expect(result.drivers[1].rank).toBe(2);
expect(result.drivers[2].rank).toBe(3);
const ranks = result.drivers.map((d) => d.rank);
expect(new Set(ranks).size).toBe(ranks.length);
for (let i = 0; i < ranks.length; i++) {
expect(ranks[i]).toBe(i + 1);
}
expect(context.eventPublisher.getDriverRankingsAccessedEventCount()).toBe(1);
});
it('should retrieve drivers with accurate data', async () => {
context.repository.addDriver({
id: 'driver-1',
name: 'John Smith',
rating: 5.0,
teamId: 'team-1',
teamName: 'Racing Team A',
raceCount: 50,
});
const result = await context.getDriverRankingsUseCase.execute({});
expect(result.drivers[0].rating).toBeGreaterThan(0);
expect(typeof result.drivers[0].rating).toBe('number');
expect(result.drivers[0].rank).toBe(1);
expect(result.drivers[0].name).toBeTruthy();
expect(typeof result.drivers[0].name).toBe('string');
expect(result.drivers[0].teamId).toBe('team-1');
expect(result.drivers[0].teamName).toBe('Racing Team A');
expect(context.eventPublisher.getDriverRankingsAccessedEventCount()).toBe(1);
});
});