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

This commit is contained in:
2026-01-23 13:04:05 +01:00
parent d97f50ed72
commit e22033be38
24 changed files with 605 additions and 455 deletions

View File

@@ -1,48 +1,35 @@
import { describe, it, expect } from 'vitest';
import { describe, expect, it } from 'vitest';
import { HomeDiscoveryViewModel } from './HomeDiscoveryViewModel';
import { LeagueCardViewModel } from './LeagueCardViewModel';
import { TeamCardViewModel } from './TeamCardViewModel';
import { UpcomingRaceCardViewModel } from './UpcomingRaceCardViewModel';
import type { HomeDiscoveryViewData } from '@/lib/view-data/HomeDiscoveryViewData';
describe('HomeDiscoveryViewModel', () => {
it('exposes the top leagues, teams and upcoming races from the DTO', () => {
const topLeagues = [
new LeagueCardViewModel({
id: 'league-1',
name: 'Pro League',
description: 'Top-tier league',
memberCount: 100,
isMember: false,
} as any),
];
it('exposes the discovery collections from ViewData', () => {
const viewData: HomeDiscoveryViewData = {
topLeagues: [{ id: 'league-1', name: 'Pro League', description: 'Top-tier league' }],
teams: [{ id: 'team-1', name: 'Team Alpha', description: 'Serious endurance', logoUrl: undefined }],
upcomingRaces: [
{ id: 'race-1', track: 'Spa-Francorchamps', car: 'GT3', formattedDate: 'Jan 1' },
],
};
const teams = [
new TeamCardViewModel({
id: 'team-1',
name: 'Team Alpha',
tag: 'ALPHA',
memberCount: 10,
isMember: true,
} as any),
];
const viewModel = new HomeDiscoveryViewModel(viewData);
const upcomingRaces = [
new UpcomingRaceCardViewModel({
id: 'race-1',
track: 'Spa-Francorchamps',
car: 'GT3',
scheduledAt: '2025-01-01T12:00:00Z',
} as any),
];
expect(viewModel.topLeagues).toBe(viewData.topLeagues);
expect(viewModel.teams).toBe(viewData.teams);
expect(viewModel.upcomingRaces).toBe(viewData.upcomingRaces);
});
const viewModel = new HomeDiscoveryViewModel({
topLeagues,
teams,
upcomingRaces,
});
it('provides basic UI helper booleans', () => {
const viewData: HomeDiscoveryViewData = {
topLeagues: [],
teams: [{ id: 'team-1', name: 'Team Alpha', description: 'Serious endurance' }],
upcomingRaces: [],
};
expect(viewModel.topLeagues).toBe(topLeagues);
expect(viewModel.teams).toBe(teams);
expect(viewModel.upcomingRaces).toBe(upcomingRaces);
const viewModel = new HomeDiscoveryViewModel(viewData);
expect(viewModel.hasTopLeagues).toBe(false);
expect(viewModel.hasTeams).toBe(true);
expect(viewModel.hasUpcomingRaces).toBe(false);
});
});