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
133 lines
4.3 KiB
TypeScript
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);
|
|
});
|
|
});
|