import { describe, expect, it } from 'vitest'; import { RaceResultDTO } from '../types/generated/RaceResultDTO'; import { RaceResultViewModel } from './RaceResultViewModel'; describe('RaceResultViewModel', () => { const mockDTO: RaceResultDTO = { driverId: '1', driverName: 'Test Driver', avatarUrl: 'http://example.com/avatar.jpg', position: 3, startPosition: 5, incidents: 2, fastestLap: 90.5, positionChange: 2, isPodium: true, isClean: false }; it('should create instance from DTO', () => { const viewModel = new RaceResultViewModel(mockDTO); expect(viewModel.driverId).toBe('1'); expect(viewModel.position).toBe(3); }); it('should show positive position change', () => { const viewModel = new RaceResultViewModel(mockDTO); expect(viewModel.positionChangeDisplay).toBe('+2'); expect(viewModel.positionChangeColor).toBe('green'); }); it('should show negative position change', () => { const dto = { ...mockDTO, positionChange: -3 }; const viewModel = new RaceResultViewModel(dto); expect(viewModel.positionChangeDisplay).toBe('-3'); expect(viewModel.positionChangeColor).toBe('red'); }); it('should detect winner', () => { const dto = { ...mockDTO, position: 1 }; const viewModel = new RaceResultViewModel(dto); expect(viewModel.isWinner).toBe(true); }); it('should detect fastest lap', () => { const viewModel = new RaceResultViewModel(mockDTO); expect(viewModel.hasFastestLap).toBe(true); }); it('should format lap time correctly', () => { const viewModel = new RaceResultViewModel(mockDTO); expect(viewModel.lapTimeFormatted).toBe('1:30.500'); }); it('should show correct incidents badge color', () => { const cleanDTO = { ...mockDTO, incidents: 0 }; const viewModel = new RaceResultViewModel(cleanDTO); expect(viewModel.incidentsBadgeColor).toBe('green'); }); it('should handle no lap time', () => { const dto = { ...mockDTO, fastestLap: 0 }; const viewModel = new RaceResultViewModel(dto); expect(viewModel.lapTimeFormatted).toBe('--:--.---'); }); });