view data fixes
Some checks failed
Contract Testing / contract-tests (pull_request) Failing after 6m4s
Contract Testing / contract-snapshot (pull_request) Has been skipped

This commit is contained in:
2026-01-23 11:59:49 +01:00
parent ae58839eb2
commit d97f50ed72
191 changed files with 2889 additions and 1019 deletions

View File

@@ -1,9 +1,10 @@
import { describe, it, expect } from 'vitest';
import { DriverLeaderboardViewModel } from './DriverLeaderboardViewModel';
import { DriverLeaderboardItemViewModel } from './DriverLeaderboardItemViewModel';
import type { DriverLeaderboardItemDTO } from '../types/generated/DriverLeaderboardItemDTO';
import { LeaderboardsViewData } from '@/lib/view-data/LeaderboardsViewData';
import { LeaderboardDriverItem } from '@/lib/view-data/LeaderboardDriverItem';
const createDriver = (overrides: Partial<DriverLeaderboardItemDTO & { avatarUrl: string }> = {}): DriverLeaderboardItemDTO & { avatarUrl: string } => ({
const createDriverViewData = (overrides: Partial<LeaderboardDriverItem> = {}): LeaderboardDriverItem => ({
id: 'driver-1',
name: 'Driver One',
rating: 1500,
@@ -12,16 +13,22 @@ const createDriver = (overrides: Partial<DriverLeaderboardItemDTO & { avatarUrl:
racesCompleted: 10,
wins: 3,
podiums: 5,
isActive: true,
rank: 1,
avatarUrl: 'https://example.com/avatar-1.jpg',
position: 1,
...overrides,
});
describe('DriverLeaderboardViewModel', () => {
it('wraps DTO drivers into DriverLeaderboardItemViewModel instances', () => {
const drivers = [createDriver({ id: 'driver-1' }), createDriver({ id: 'driver-2', name: 'Driver Two' })];
const viewModel = new DriverLeaderboardViewModel({ drivers });
it('wraps ViewData drivers into DriverLeaderboardItemViewModel instances', () => {
const viewData: LeaderboardsViewData = {
drivers: [
createDriverViewData({ id: 'driver-1', position: 1 }),
createDriverViewData({ id: 'driver-2', name: 'Driver Two', position: 2 })
],
teams: []
};
const viewModel = new DriverLeaderboardViewModel(viewData);
expect(viewModel.drivers).toHaveLength(2);
expect(viewModel.drivers[0]).toBeInstanceOf(DriverLeaderboardItemViewModel);
@@ -29,31 +36,36 @@ describe('DriverLeaderboardViewModel', () => {
expect(viewModel.drivers[1].position).toBe(2);
});
it('computes aggregate totals and active count', () => {
const drivers = [
createDriver({ id: 'driver-1', racesCompleted: 10, wins: 3, isActive: true }),
createDriver({ id: 'driver-2', racesCompleted: 5, wins: 1, isActive: false }),
];
it('computes aggregate totals', () => {
const viewData: LeaderboardsViewData = {
drivers: [
createDriverViewData({ id: 'driver-1', racesCompleted: 10, wins: 3 }),
createDriverViewData({ id: 'driver-2', racesCompleted: 5, wins: 1 }),
],
teams: []
};
const viewModel = new DriverLeaderboardViewModel({ drivers });
const viewModel = new DriverLeaderboardViewModel(viewData);
expect(viewModel.totalRaces).toBe(15);
expect(viewModel.totalWins).toBe(4);
expect(viewModel.activeCount).toBe(1);
});
it('passes previous rating to items when provided', () => {
const currentDrivers = [
createDriver({ id: 'driver-1', rating: 1550 }),
createDriver({ id: 'driver-2', rating: 1400 }),
];
it('passes previous rating to items when provided via Record', () => {
const viewData: LeaderboardsViewData = {
drivers: [
createDriverViewData({ id: 'driver-1', rating: 1550 }),
createDriverViewData({ id: 'driver-2', rating: 1400 }),
],
teams: []
};
const previousDrivers: (DriverLeaderboardItemDTO & { avatarUrl: string })[] = [
{ ...createDriver({ id: 'driver-1', rating: 1500 }) },
{ ...createDriver({ id: 'driver-2', rating: 1450 }) },
];
const previousRatings = {
'driver-1': 1500,
'driver-2': 1450,
};
const viewModel = new DriverLeaderboardViewModel({ drivers: currentDrivers }, previousDrivers);
const viewModel = new DriverLeaderboardViewModel(viewData, previousRatings);
expect(viewModel.drivers[0].ratingTrend).toBe('up');
expect(viewModel.drivers[1].ratingTrend).toBe('down');