core tests
This commit is contained in:
44
core/racing/application/utils/RaceResultGenerator.test.ts
Normal file
44
core/racing/application/utils/RaceResultGenerator.test.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
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);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,40 @@
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { RaceResultGeneratorWithIncidents } from './RaceResultGeneratorWithIncidents';
|
||||
import { RaceIncidents } from '../../domain/value-objects/RaceIncidents';
|
||||
|
||||
describe('RaceResultGeneratorWithIncidents', () => {
|
||||
it('should generate results for all drivers', () => {
|
||||
const raceId = 'race-1';
|
||||
const driverIds = ['d1', 'd2'];
|
||||
const driverRatings = new Map([
|
||||
['d1', 2000],
|
||||
['d2', 1500],
|
||||
]);
|
||||
|
||||
const results = RaceResultGeneratorWithIncidents.generateRaceResults(raceId, driverIds, driverRatings);
|
||||
|
||||
expect(results).toHaveLength(2);
|
||||
results.forEach(r => {
|
||||
expect(r.raceId.toString()).toBe(raceId);
|
||||
expect(r.incidents).toBeInstanceOf(RaceIncidents);
|
||||
});
|
||||
});
|
||||
|
||||
it('should calculate incident penalty points', () => {
|
||||
const incidents = new RaceIncidents([
|
||||
{ type: 'contact', lap: 1, description: 'desc', penaltyPoints: 2 },
|
||||
{ type: 'unsafe_rejoin', lap: 5, description: 'desc', penaltyPoints: 3 },
|
||||
]);
|
||||
|
||||
expect(RaceResultGeneratorWithIncidents.getIncidentPenaltyPoints(incidents)).toBe(5);
|
||||
});
|
||||
|
||||
it('should get incident description', () => {
|
||||
const incidents = new RaceIncidents([
|
||||
{ type: 'contact', lap: 1, description: 'desc', penaltyPoints: 2 },
|
||||
]);
|
||||
|
||||
const description = RaceResultGeneratorWithIncidents.getIncidentDescription(incidents);
|
||||
expect(description).toContain('1 incidents');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user