import { describe, it, expect, vi } 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); }); });