Some checks failed
CI / lint-typecheck (pull_request) Failing after 4m51s
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
66 lines
3.2 KiB
TypeScript
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);
|
|
});
|
|
});
|