Files
gridpilot.gg/core/racing/domain/entities/championship/ChampionshipStanding.test.ts
2025-12-17 00:33:13 +01:00

105 lines
3.0 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { ChampionshipStanding } from './ChampionshipStanding';
import type { ParticipantRef } from '../../types/ParticipantRef';
describe('ChampionshipStanding', () => {
const participant: ParticipantRef = { type: 'driver', id: 'driver1' };
it('should create a championship standing', () => {
const standing = ChampionshipStanding.create({
seasonId: 'season1',
championshipId: 'champ1',
participant,
totalPoints: 100,
resultsCounted: 5,
resultsDropped: 1,
position: 1,
});
expect(standing.id).toBe('season1-champ1-driver1');
expect(standing.seasonId).toBe('season1');
expect(standing.championshipId).toBe('champ1');
expect(standing.participant).toBe(participant);
expect(standing.totalPoints.toNumber()).toBe(100);
expect(standing.resultsCounted.toNumber()).toBe(5);
expect(standing.resultsDropped.toNumber()).toBe(1);
expect(standing.position.toNumber()).toBe(1);
});
it('should update position', () => {
const standing = ChampionshipStanding.create({
seasonId: 'season1',
championshipId: 'champ1',
participant,
totalPoints: 100,
resultsCounted: 5,
resultsDropped: 1,
position: 1,
});
const updated = standing.withPosition(2);
expect(updated.position.toNumber()).toBe(2);
expect(updated.id).toBe('season1-champ1-driver1');
expect(updated.totalPoints.toNumber()).toBe(100);
});
it('should throw on invalid seasonId', () => {
expect(() => ChampionshipStanding.create({
seasonId: '',
championshipId: 'champ1',
participant,
totalPoints: 100,
resultsCounted: 5,
resultsDropped: 1,
position: 1,
})).toThrow('Season ID is required');
});
it('should throw on invalid championshipId', () => {
expect(() => ChampionshipStanding.create({
seasonId: 'season1',
championshipId: '',
participant,
totalPoints: 100,
resultsCounted: 5,
resultsDropped: 1,
position: 1,
})).toThrow('Championship ID is required');
});
it('should throw on invalid participant', () => {
expect(() => ChampionshipStanding.create({
seasonId: 'season1',
championshipId: 'champ1',
participant: { type: 'driver', id: '' },
totalPoints: 100,
resultsCounted: 5,
resultsDropped: 1,
position: 1,
})).toThrow('Participant is required');
});
it('should throw on negative points', () => {
expect(() => ChampionshipStanding.create({
seasonId: 'season1',
championshipId: 'champ1',
participant,
totalPoints: -1,
resultsCounted: 5,
resultsDropped: 1,
position: 1,
})).toThrow('Points cannot be negative');
});
it('should throw on invalid position', () => {
expect(() => ChampionshipStanding.create({
seasonId: 'season1',
championshipId: 'champ1',
participant,
totalPoints: 100,
resultsCounted: 5,
resultsDropped: 1,
position: 0,
})).toThrow('Position must be a positive integer');
});
});