view data fixes
This commit is contained in:
@@ -1,45 +1,51 @@
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { DriverSummaryViewModel } from './DriverSummaryViewModel';
|
||||
import type { GetDriverOutputDTO } from '../types/generated/GetDriverOutputDTO';
|
||||
import type { DriverSummaryData } from '../view-data/LeagueDetailViewData';
|
||||
|
||||
const driverDto: GetDriverOutputDTO = {
|
||||
id: 'driver-1',
|
||||
iracingId: 'ir-123',
|
||||
name: 'Test Driver',
|
||||
country: 'DE',
|
||||
joinedAt: '2024-01-01T00:00:00Z',
|
||||
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('maps driver and optional fields from DTO', () => {
|
||||
const viewModel = new DriverSummaryViewModel({
|
||||
driver: driverDto,
|
||||
rating: 2500,
|
||||
rank: 10,
|
||||
});
|
||||
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.driver).toBe(driverDto);
|
||||
expect(viewModel.rating).toBe(2500);
|
||||
expect(viewModel.ratingLabel).toBe('2,500');
|
||||
|
||||
expect(viewModel.rank).toBe(10);
|
||||
expect(viewModel.rankLabel).toBe('10');
|
||||
});
|
||||
|
||||
it('defaults nullable rating and rank when undefined', () => {
|
||||
it('renders placeholders when rating or rank are null', () => {
|
||||
const viewModel = new DriverSummaryViewModel({
|
||||
driver: driverDto,
|
||||
});
|
||||
|
||||
expect(viewModel.rating).toBeNull();
|
||||
expect(viewModel.rank).toBeNull();
|
||||
});
|
||||
|
||||
it('keeps explicit null rating and rank', () => {
|
||||
const viewModel = new DriverSummaryViewModel({
|
||||
driver: driverDto,
|
||||
...viewData,
|
||||
rating: null,
|
||||
rank: null,
|
||||
});
|
||||
|
||||
expect(viewModel.rating).toBeNull();
|
||||
expect(viewModel.ratingLabel).toBe('—');
|
||||
|
||||
expect(viewModel.rank).toBeNull();
|
||||
expect(viewModel.rankLabel).toBe('—');
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user