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

66 lines
3.2 KiB
TypeScript

import { describe, it, expect, beforeEach } from 'vitest';
import { LeaderboardsTestContext } from '../LeaderboardsTestContext';
describe('GetDriverRankingsUseCase - Sort Functionality', () => {
let context: LeaderboardsTestContext;
beforeEach(() => {
context = LeaderboardsTestContext.create();
context.clear();
});
it('should sort drivers by rating (high to low)', async () => {
context.repository.addDriver({ id: 'driver-1', name: 'Driver A', rating: 3.5, raceCount: 10 });
context.repository.addDriver({ id: 'driver-2', name: 'Driver B', rating: 4.0, raceCount: 10 });
context.repository.addDriver({ id: 'driver-3', name: 'Driver C', rating: 4.5, raceCount: 10 });
context.repository.addDriver({ id: 'driver-4', name: 'Driver D', rating: 5.0, raceCount: 10 });
const result = await context.getDriverRankingsUseCase.execute({ sortBy: 'rating', sortOrder: 'desc' });
expect(result.drivers[0]!.rating).toBe(5.0);
expect(result.drivers[1]!.rating).toBe(4.5);
expect(result.drivers[2]!.rating).toBe(4.0);
expect(result.drivers[3]!.rating).toBe(3.5);
expect(context.eventPublisher.getDriverRankingsAccessedEventCount()).toBe(1);
});
it('should sort drivers by name (A-Z)', async () => {
context.repository.addDriver({ id: 'driver-1', name: 'Zoe', rating: 5.0, raceCount: 10 });
context.repository.addDriver({ id: 'driver-2', name: 'Alice', rating: 4.8, raceCount: 10 });
context.repository.addDriver({ id: 'driver-3', name: 'Bob', rating: 4.5, raceCount: 10 });
const result = await context.getDriverRankingsUseCase.execute({ sortBy: 'name', sortOrder: 'asc' });
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 sort drivers by rank (low to high)', 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({ sortBy: 'rank', sortOrder: 'asc' });
expect(result.drivers[0]!.rank).toBe(1);
expect(result.drivers[1]!.rank).toBe(2);
expect(result.drivers[2]!.rank).toBe(3);
expect(context.eventPublisher.getDriverRankingsAccessedEventCount()).toBe(1);
});
it('should sort drivers by race count (high to low)', async () => {
context.repository.addDriver({ id: 'driver-1', name: 'Driver A', rating: 5.0, raceCount: 50 });
context.repository.addDriver({ id: 'driver-2', name: 'Driver B', rating: 4.8, raceCount: 30 });
context.repository.addDriver({ id: 'driver-3', name: 'Driver C', rating: 4.5, raceCount: 40 });
const result = await context.getDriverRankingsUseCase.execute({ sortBy: 'raceCount', sortOrder: 'desc' });
expect(result.drivers[0]!.raceCount).toBe(50);
expect(result.drivers[1]!.raceCount).toBe(40);
expect(result.drivers[2]!.raceCount).toBe(30);
expect(context.eventPublisher.getDriverRankingsAccessedEventCount()).toBe(1);
});
});