import { describe, it, expect } from 'vitest'; import { DriverSummaryViewModel } from './DriverSummaryViewModel'; import type { DriverSummaryData } from '../view-data/LeagueDetailViewData'; const viewData: DriverSummaryData = { driverId: 'driver-1', driverName: 'Test Driver', avatarUrl: 'https://example.com/avatar.png', rating: 2500, rank: 10, roleBadgeText: 'Owner', roleBadgeClasses: 'bg-blue-50 text-blue-700', profileUrl: '/drivers/driver-1', }; describe('DriverSummaryViewModel', () => { it('exposes driver identity fields from ViewData', () => { const viewModel = new DriverSummaryViewModel(viewData); expect(viewModel.id).toBe('driver-1'); expect(viewModel.name).toBe('Test Driver'); expect(viewModel.avatarUrl).toBe('https://example.com/avatar.png'); expect(viewModel.profileUrl).toBe('/drivers/driver-1'); expect(viewModel.roleBadgeText).toBe('Owner'); expect(viewModel.roleBadgeClasses).toBe('bg-blue-50 text-blue-700'); }); it('derives ratingLabel and rankLabel for UI rendering', () => { const viewModel = new DriverSummaryViewModel(viewData); expect(viewModel.rating).toBe(2500); expect(viewModel.ratingLabel).toBe('2,500'); expect(viewModel.rank).toBe(10); expect(viewModel.rankLabel).toBe('10'); }); it('renders placeholders when rating or rank are null', () => { const viewModel = new DriverSummaryViewModel({ ...viewData, rating: null, rank: null, }); expect(viewModel.rating).toBeNull(); expect(viewModel.ratingLabel).toBe('—'); expect(viewModel.rank).toBeNull(); expect(viewModel.rankLabel).toBe('—'); }); });