49 lines
1.6 KiB
TypeScript
49 lines
1.6 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { LeagueScoringChampionshipViewModel } from './LeagueScoringChampionshipViewModel';
|
|
|
|
describe('LeagueScoringChampionshipViewModel', () => {
|
|
it('exposes required fields from input', () => {
|
|
const input = {
|
|
id: 'champ-1',
|
|
name: 'Drivers',
|
|
type: 'driver',
|
|
sessionTypes: ['race'],
|
|
pointsPreview: [{ sessionType: 'race', position: 1, points: 25 }],
|
|
bonusSummary: ['Pole: +1'],
|
|
dropPolicyDescription: 'Best 6 of 8',
|
|
};
|
|
|
|
const vm = new LeagueScoringChampionshipViewModel(input);
|
|
|
|
expect(vm.id).toBe('champ-1');
|
|
expect(vm.name).toBe('Drivers');
|
|
expect(vm.type).toBe('driver');
|
|
expect(vm.sessionTypes).toEqual(['race']);
|
|
expect(vm.pointsPreview).toEqual([{ sessionType: 'race', position: 1, points: 25 }]);
|
|
expect(vm.bonusSummary).toEqual(['Pole: +1']);
|
|
expect(vm.dropPolicyDescription).toBe('Best 6 of 8');
|
|
|
|
expect(typeof vm.id).toBe('string');
|
|
expect(typeof vm.name).toBe('string');
|
|
expect(typeof vm.type).toBe('string');
|
|
expect(Array.isArray(vm.sessionTypes)).toBe(true);
|
|
expect(Array.isArray(vm.pointsPreview)).toBe(true);
|
|
expect(Array.isArray(vm.bonusSummary)).toBe(true);
|
|
});
|
|
|
|
it('defaults optional extended fields deterministically', () => {
|
|
const input = {
|
|
id: 'champ-1',
|
|
name: 'Drivers',
|
|
type: 'driver',
|
|
sessionTypes: ['race'],
|
|
pointsPreview: undefined,
|
|
};
|
|
|
|
const vm = new LeagueScoringChampionshipViewModel(input);
|
|
|
|
expect(vm.pointsPreview).toEqual([]);
|
|
expect(vm.bonusSummary).toEqual([]);
|
|
expect(vm.dropPolicyDescription).toBeUndefined();
|
|
});
|
|
}); |