wip league admin tools
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { describe, it, expect, vi, Mocked } from 'vitest';
|
||||
import { describe, it, expect, vi, Mocked, beforeEach, afterEach } from 'vitest';
|
||||
import { LeagueService } from './LeagueService';
|
||||
import { LeaguesApiClient } from '../../api/leagues/LeaguesApiClient';
|
||||
import { LeagueStandingsViewModel } from '../../view-models/LeagueStandingsViewModel';
|
||||
@@ -114,12 +114,19 @@ describe('LeagueService', () => {
|
||||
});
|
||||
|
||||
describe('getLeagueSchedule', () => {
|
||||
it('should call apiClient.getSchedule and return LeagueScheduleViewModel', async () => {
|
||||
afterEach(() => {
|
||||
vi.useRealTimers();
|
||||
});
|
||||
|
||||
it('should call apiClient.getSchedule and return LeagueScheduleViewModel with Date parsing', async () => {
|
||||
vi.useFakeTimers();
|
||||
vi.setSystemTime(new Date('2025-01-01T00:00:00Z'));
|
||||
|
||||
const leagueId = 'league-123';
|
||||
const mockDto = {
|
||||
races: [
|
||||
{ id: 'race-1', name: 'Race One', date: new Date().toISOString() },
|
||||
{ id: 'race-2', name: 'Race Two', date: new Date().toISOString() },
|
||||
{ id: 'race-1', name: 'Race One', date: '2024-12-31T20:00:00Z' },
|
||||
{ id: 'race-2', name: 'Race Two', date: '2025-01-02T20:00:00Z' },
|
||||
],
|
||||
} as any;
|
||||
|
||||
@@ -129,14 +136,51 @@ describe('LeagueService', () => {
|
||||
|
||||
expect(mockApiClient.getSchedule).toHaveBeenCalledWith(leagueId);
|
||||
expect(result).toBeInstanceOf(LeagueScheduleViewModel);
|
||||
expect(result.races).toEqual(mockDto.races);
|
||||
|
||||
expect(result.raceCount).toBe(2);
|
||||
expect(result.races[0]!.scheduledAt).toBeInstanceOf(Date);
|
||||
expect(result.races[0]!.isPast).toBe(true);
|
||||
expect(result.races[1]!.isUpcoming).toBe(true);
|
||||
});
|
||||
|
||||
it('should prefer scheduledAt over date and map optional fields/status', async () => {
|
||||
vi.useFakeTimers();
|
||||
vi.setSystemTime(new Date('2025-01-01T00:00:00Z'));
|
||||
|
||||
const leagueId = 'league-123';
|
||||
const mockDto = {
|
||||
races: [
|
||||
{
|
||||
id: 'race-1',
|
||||
name: 'Round 1',
|
||||
date: '2025-01-02T20:00:00Z',
|
||||
scheduledAt: '2025-01-03T20:00:00Z',
|
||||
track: 'Monza',
|
||||
car: 'GT3',
|
||||
sessionType: 'race',
|
||||
isRegistered: true,
|
||||
status: 'scheduled',
|
||||
},
|
||||
],
|
||||
} as any;
|
||||
|
||||
mockApiClient.getSchedule.mockResolvedValue(mockDto);
|
||||
|
||||
const result = await service.getLeagueSchedule(leagueId);
|
||||
|
||||
expect(result.races[0]!.scheduledAt.toISOString()).toBe('2025-01-03T20:00:00.000Z');
|
||||
expect(result.races[0]!.track).toBe('Monza');
|
||||
expect(result.races[0]!.car).toBe('GT3');
|
||||
expect(result.races[0]!.sessionType).toBe('race');
|
||||
expect(result.races[0]!.isRegistered).toBe(true);
|
||||
expect(result.races[0]!.status).toBe('scheduled');
|
||||
});
|
||||
|
||||
it('should handle empty races array', async () => {
|
||||
const leagueId = 'league-123';
|
||||
const mockDto = { races: [] };
|
||||
|
||||
mockApiClient.getSchedule.mockResolvedValue(mockDto);
|
||||
mockApiClient.getSchedule.mockResolvedValue(mockDto as any);
|
||||
|
||||
const result = await service.getLeagueSchedule(leagueId);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user