Files
gridpilot.gg/apps/website/lib/view-models/LeagueSettingsViewModel.test.ts
2025-12-20 00:31:31 +01:00

64 lines
2.3 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { LeagueSettingsViewModel } from './LeagueSettingsViewModel';
import { DriverSummaryViewModel } from './DriverSummaryViewModel';
import type { LeagueConfigFormModel } from '@core/racing/application';
import type { LeagueScoringPresetDTO } from '@core/racing/application/ports/LeagueScoringPresetProvider';
const createConfig = (overrides: Partial<LeagueConfigFormModel> = {}): LeagueConfigFormModel => ({
name: 'Pro League',
description: 'Top tier competition',
maxDrivers: 40,
maxTeams: 10,
...overrides,
} as LeagueConfigFormModel);
const createPreset = (overrides: Partial<LeagueScoringPresetDTO> = {}): LeagueScoringPresetDTO => ({
id: 'preset-1',
name: 'Standard scoring',
description: 'Top 15 get points',
gameId: 'iracing',
...overrides,
} as LeagueScoringPresetDTO);
const createDriverSummary = (id: string, name: string): DriverSummaryViewModel =>
new DriverSummaryViewModel({
driver: {
id,
iracingId: `ir-${id}`,
name,
country: 'DE',
joinedAt: '2024-01-01T00:00:00Z',
},
});
describe('LeagueSettingsViewModel', () => {
it('maps league, config, presets, owner and members from DTO', () => {
const league = { id: 'league-1', name: 'Pro League', ownerId: 'owner-1' };
const config = createConfig();
const presets = [createPreset(), createPreset({ id: 'preset-2', name: 'Alt scoring' })];
const owner = createDriverSummary('driver-1', 'Owner Driver');
const members = [createDriverSummary('driver-2', 'Member One'), createDriverSummary('driver-3', 'Member Two')];
const vm = new LeagueSettingsViewModel({ league, config, presets, owner, members });
expect(vm.league).toBe(league);
expect(vm.config).toBe(config);
expect(vm.presets).toBe(presets);
expect(vm.owner).toBe(owner);
expect(vm.members).toBe(members);
});
it('allows null owner while keeping members and presets', () => {
const league = { id: 'league-1', name: 'Pro League', ownerId: 'owner-1' };
const config = createConfig();
const presets = [createPreset()];
const members = [createDriverSummary('driver-2', 'Member One')];
const vm = new LeagueSettingsViewModel({ league, config, presets, owner: null, members });
expect(vm.owner).toBeNull();
expect(vm.members).toHaveLength(1);
expect(vm.presets).toHaveLength(1);
});
});