Files
gridpilot.gg/core/racing/application/use-cases/WithdrawFromRaceUseCase.test.ts
2025-12-16 21:05:01 +01:00

41 lines
1.3 KiB
TypeScript

import { describe, it, expect, vi } from 'vitest';
import { WithdrawFromRaceUseCase } from './WithdrawFromRaceUseCase';
import type { IRaceRegistrationRepository } from '../../domain/repositories/IRaceRegistrationRepository';
describe('WithdrawFromRaceUseCase', () => {
it('withdraws from race successfully', async () => {
const mockRegistrationRepository = {
withdraw: vi.fn().mockResolvedValue(undefined),
} as unknown as IRaceRegistrationRepository;
const useCase = new WithdrawFromRaceUseCase(mockRegistrationRepository);
const command = {
raceId: 'race-1',
driverId: 'driver-1',
};
const result = await useCase.execute(command);
expect(result.isOk()).toBe(true);
expect(mockRegistrationRepository.withdraw).toHaveBeenCalledWith('race-1', 'driver-1');
});
it('returns error when not registered', async () => {
const mockRegistrationRepository = {
withdraw: vi.fn().mockRejectedValue(new Error('not registered')),
} as unknown as IRaceRegistrationRepository;
const useCase = new WithdrawFromRaceUseCase(mockRegistrationRepository);
const command = {
raceId: 'race-1',
driverId: 'driver-1',
};
const result = await useCase.execute(command);
expect(result.isErr()).toBe(true);
expect(result.unwrapErr()).toEqual({ code: 'NOT_REGISTERED' });
});
});