import { describe, it, expect } from 'vitest'; import { LeagueSettingsViewDataBuilder } from './LeagueSettingsViewDataBuilder'; import type { LeagueSettingsApiDto } from '@/lib/types/tbd/LeagueSettingsApiDto'; describe('LeagueSettingsViewDataBuilder', () => { describe('happy paths', () => { it('should transform LeagueSettingsApiDto to LeagueSettingsViewData correctly', () => { const leagueSettingsApiDto: LeagueSettingsApiDto = { leagueId: 'league-123', league: { id: 'league-123', name: 'Test League', description: 'Test Description', }, config: { maxDrivers: 32, qualifyingFormat: 'Open', raceLength: 30, }, }; const result = LeagueSettingsViewDataBuilder.build(leagueSettingsApiDto); expect(result).toEqual({ leagueId: 'league-123', league: { id: 'league-123', name: 'Test League', description: 'Test Description', }, config: { maxDrivers: 32, qualifyingFormat: 'Open', raceLength: 30, }, }); }); it('should handle minimal configuration', () => { const leagueSettingsApiDto: LeagueSettingsApiDto = { leagueId: 'league-456', league: { id: 'league-456', name: 'Minimal League', description: '', }, config: { maxDrivers: 16, qualifyingFormat: 'Open', raceLength: 20, }, }; const result = LeagueSettingsViewDataBuilder.build(leagueSettingsApiDto); expect(result.leagueId).toBe('league-456'); 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: LeagueSettingsApiDto = { leagueId: 'league-789', league: { id: 'league-789', name: 'Full League', description: 'Full Description', }, config: { maxDrivers: 24, qualifyingFormat: 'Open', raceLength: 45, }, }; const result = LeagueSettingsViewDataBuilder.build(leagueSettingsApiDto); expect(result.leagueId).toBe(leagueSettingsApiDto.leagueId); expect(result.league).toEqual(leagueSettingsApiDto.league); expect(result.config).toEqual(leagueSettingsApiDto.config); }); it('should not modify the input DTO', () => { const leagueSettingsApiDto: LeagueSettingsApiDto = { leagueId: 'league-101', league: { id: 'league-101', name: 'Test League', description: 'Test', }, config: { maxDrivers: 20, qualifyingFormat: 'Open', raceLength: 25, }, }; const originalDto = { ...leagueSettingsApiDto }; LeagueSettingsViewDataBuilder.build(leagueSettingsApiDto); expect(leagueSettingsApiDto).toEqual(originalDto); }); }); describe('edge cases', () => { it('should handle different qualifying formats', () => { const leagueSettingsApiDto: LeagueSettingsApiDto = { leagueId: 'league-102', league: { id: 'league-102', name: 'Test League', description: 'Test', }, config: { maxDrivers: 20, qualifyingFormat: 'Closed', raceLength: 30, }, }; const result = LeagueSettingsViewDataBuilder.build(leagueSettingsApiDto); expect(result.config.qualifyingFormat).toBe('Closed'); }); it('should handle large driver counts', () => { const leagueSettingsApiDto: LeagueSettingsApiDto = { leagueId: 'league-103', league: { id: 'league-103', name: 'Test League', description: 'Test', }, config: { maxDrivers: 100, qualifyingFormat: 'Open', raceLength: 60, }, }; const result = LeagueSettingsViewDataBuilder.build(leagueSettingsApiDto); expect(result.config.maxDrivers).toBe(100); }); }); });