import { describe, it, expect } from 'vitest'; import { LeagueSettingsViewDataBuilder } from './LeagueSettingsViewDataBuilder'; describe('LeagueSettingsViewDataBuilder', () => { describe('happy paths', () => { it('should transform LeagueSettingsInputDTO to LeagueSettingsViewData correctly', () => { const leagueSettingsApiDto = { league: { id: 'league-123', name: 'Test League', ownerId: 'owner-1', createdAt: '2024-01-01', }, config: { maxDrivers: 32, }, presets: [], owner: null, members: [], }; const result = LeagueSettingsViewDataBuilder.build(leagueSettingsApiDto); expect(result).toEqual({ league: { id: 'league-123', name: 'Test League', ownerId: 'owner-1', createdAt: '2024-01-01', }, config: { maxDrivers: 32, }, presets: [], owner: null, members: [], }); }); it('should handle minimal configuration', () => { const leagueSettingsApiDto = { league: { id: 'league-456', name: 'Minimal League', ownerId: 'owner-2', createdAt: '2024-01-02', }, config: { maxDrivers: 16, }, presets: [], owner: null, members: [], }; const result = LeagueSettingsViewDataBuilder.build(leagueSettingsApiDto); expect(result.league.name).toBe('Minimal League'); expect(result.config.maxDrivers).toBe(16); }); }); describe('data transformation', () => { it('should preserve all DTO fields in the output', () => { const leagueSettingsApiDto = { league: { id: 'league-789', name: 'Full League', ownerId: 'owner-3', createdAt: '2024-01-03', }, config: { maxDrivers: 24, }, presets: [], owner: null, members: [], }; const result = LeagueSettingsViewDataBuilder.build(leagueSettingsApiDto); expect(result.league).toEqual(leagueSettingsApiDto.league); expect(result.config).toEqual(leagueSettingsApiDto.config); }); it('should not modify the input DTO', () => { const leagueSettingsApiDto = { league: { id: 'league-101', name: 'Test League', ownerId: 'owner-4', createdAt: '2024-01-04', }, config: { maxDrivers: 20, }, presets: [], owner: null, members: [], }; const originalDto = JSON.parse(JSON.stringify(leagueSettingsApiDto)); LeagueSettingsViewDataBuilder.build(leagueSettingsApiDto); expect(leagueSettingsApiDto).toEqual(originalDto); }); }); describe('edge cases', () => { it('should handle large driver counts', () => { const leagueSettingsApiDto = { league: { id: 'league-103', name: 'Test League', ownerId: 'owner-5', createdAt: '2024-01-05', }, config: { maxDrivers: 100, }, presets: [], owner: null, members: [], }; const result = LeagueSettingsViewDataBuilder.build(leagueSettingsApiDto); expect(result.config.maxDrivers).toBe(100); }); }); });