Files
gridpilot.gg/core/racing/application/utils/RaceResultGenerator.test.ts
Marc Mintel bf2c0fdb0c
Some checks failed
CI / lint-typecheck (pull_request) Failing after 1m29s
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 01:54:57 +01:00

45 lines
1.8 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { RaceResultGenerator } from './RaceResultGenerator';
describe('RaceResultGenerator', () => {
it('should generate results for all drivers', () => {
const raceId = 'race-1';
const driverIds = ['d1', 'd2', 'd3'];
const driverRatings = new Map([
['d1', 2000],
['d2', 1500],
['d3', 1000],
]);
const results = RaceResultGenerator.generateRaceResults(raceId, driverIds, driverRatings);
expect(results).toHaveLength(3);
const resultDriverIds = results.map(r => r.driverId.toString());
expect(resultDriverIds).toContain('d1');
expect(resultDriverIds).toContain('d2');
expect(resultDriverIds).toContain('d3');
results.forEach(r => {
expect(r.raceId.toString()).toBe(raceId);
expect(r.position.toNumber()).toBeGreaterThan(0);
expect(r.position.toNumber()).toBeLessThanOrEqual(3);
});
});
it('should provide incident descriptions', () => {
expect(RaceResultGenerator.getIncidentDescription(0)).toBe('Clean race');
expect(RaceResultGenerator.getIncidentDescription(1)).toBe('Track limits violation');
expect(RaceResultGenerator.getIncidentDescription(2)).toBe('Contact with another car');
expect(RaceResultGenerator.getIncidentDescription(3)).toBe('Off-track incident');
expect(RaceResultGenerator.getIncidentDescription(4)).toBe('Collision requiring safety car');
expect(RaceResultGenerator.getIncidentDescription(5)).toBe('5 incidents');
});
it('should calculate incident penalty points', () => {
expect(RaceResultGenerator.getIncidentPenaltyPoints(0)).toBe(0);
expect(RaceResultGenerator.getIncidentPenaltyPoints(1)).toBe(0);
expect(RaceResultGenerator.getIncidentPenaltyPoints(2)).toBe(2);
expect(RaceResultGenerator.getIncidentPenaltyPoints(3)).toBe(4);
});
});