import { describe, it, expect, vi, Mocked } from 'vitest'; import { DashboardService } from './DashboardService'; import { DashboardApiClient } from '../../api/dashboard/DashboardApiClient'; import { DashboardOverviewViewModel } from '../../view-models/DashboardOverviewViewModel'; describe('DashboardService', () => { let mockApiClient: Mocked; let service: DashboardService; beforeEach(() => { mockApiClient = { getDashboardOverview: vi.fn(), } as Mocked; service = new DashboardService(mockApiClient); }); describe('getDashboardOverview', () => { it('should call apiClient.getDashboardOverview and return DashboardOverviewViewModel', async () => { const mockDto = { currentDriver: { id: 'driver-123', name: 'Test Driver', avatarUrl: 'https://example.com/avatar.jpg', country: 'US', totalRaces: 42, wins: 10, podiums: 20, rating: 1500, globalRank: 5, consistency: 85, }, myUpcomingRaces: [], otherUpcomingRaces: [], upcomingRaces: [], activeLeaguesCount: 3, nextRace: null, recentResults: [], leagueStandingsSummaries: [], feedSummary: { feedItems: [] }, friends: [], }; mockApiClient.getDashboardOverview.mockResolvedValue(mockDto); const result = await service.getDashboardOverview(); expect(mockApiClient.getDashboardOverview).toHaveBeenCalled(); expect(result).toBeInstanceOf(DashboardOverviewViewModel); expect(result.activeLeaguesCount).toBe(3); }); it('should throw error when apiClient.getDashboardOverview fails', async () => { const error = new Error('API call failed'); mockApiClient.getDashboardOverview.mockRejectedValue(error); await expect(service.getDashboardOverview()).rejects.toThrow('API call failed'); }); }); });