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 => ({ name: 'Pro League', description: 'Top tier competition', maxDrivers: 40, maxTeams: 10, ...overrides, } as LeagueConfigFormModel); const createPreset = (overrides: Partial = {}): 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); }); });