Files
gridpilot.gg/adapters/racing/persistence/inmemory/InMemoryLeagueStandingsRepository.test.ts
2025-12-22 22:46:15 +01:00

80 lines
3.2 KiB
TypeScript

import { vi, describe, it, expect, beforeEach } from 'vitest';
import { InMemoryLeagueStandingsRepository } from './InMemoryLeagueStandingsRepository';
import type { Logger } from '@core/shared/application';
import type { RawStanding } from '@core/league/application/ports/ILeagueStandingsRepository';
describe('InMemoryLeagueStandingsRepository', () => {
let repository: InMemoryLeagueStandingsRepository;
let mockLogger: Logger;
beforeEach(() => {
mockLogger = {
debug: vi.fn(),
info: vi.fn(),
warn: vi.fn(),
error: vi.fn(),
};
repository = new InMemoryLeagueStandingsRepository(mockLogger);
});
const createTestStanding = (_id: string, _leagueId: string, driverId: string, position: number, points: number): RawStanding => ({
driverId,
position,
points,
wins: 0,
races: 0,
poles: 0,
podiums: 0,
});
describe('constructor', () => {
it('should initialize with a logger', () => {
expect(repository).toBeDefined();
expect(mockLogger.info).toHaveBeenCalledWith('InMemoryLeagueStandingsRepository initialized.');
});
});
describe('getLeagueStandings', () => {
it('should return empty array if league not found', async () => {
const result = await repository.getLeagueStandings('nonexistent');
expect(result).toEqual([]);
expect(mockLogger.debug).toHaveBeenCalledWith('[InMemoryLeagueStandingsRepository] Getting standings for league: nonexistent.');
expect(mockLogger.info).toHaveBeenCalledWith('Found 0 standings for league: nonexistent.');
});
it('should return the standings if league exists', async () => {
const standings: RawStanding[] = [
createTestStanding('1', 'league1', 'driver1', 1, 25),
createTestStanding('2', 'league1', 'driver2', 2, 20),
];
(repository as InMemoryLeagueStandingsRepository).setLeagueStandings('league1', standings);
const result = await repository.getLeagueStandings('league1');
expect(result).toEqual(standings);
expect(mockLogger.debug).toHaveBeenCalledWith('[InMemoryLeagueStandingsRepository] Getting standings for league: league1.');
expect(mockLogger.info).toHaveBeenCalledWith('Found 2 standings for league: league1.');
});
it('should return empty array if league exists but has no standings', async () => {
(repository as InMemoryLeagueStandingsRepository).setLeagueStandings('league1', []);
const result = await repository.getLeagueStandings('league1');
expect(result).toEqual([]);
expect(mockLogger.info).toHaveBeenCalledWith('Found 0 standings for league: league1.');
});
});
describe('setLeagueStandings', () => {
it('should set standings for a league', async () => {
const standings: RawStanding[] = [
createTestStanding('1', 'league1', 'driver1', 1, 25),
];
(repository as InMemoryLeagueStandingsRepository).setLeagueStandings('league1', standings);
const result = await repository.getLeagueStandings('league1');
expect(result).toEqual(standings);
expect(mockLogger.debug).toHaveBeenCalledWith('[InMemoryLeagueStandingsRepository] Set standings for league: league1.');
});
});
});