Files
gridpilot.gg/tests/application/CompleteDriverOnboardingUseCase.spec.ts
2025-12-16 11:52:26 +01:00

102 lines
3.1 KiB
TypeScript

import { describe, it, expect, beforeEach, vi } from 'vitest';
import { CompleteDriverOnboardingUseCase } from '@core/racing/application/use-cases/CompleteDriverOnboardingUseCase';
import { IDriverRepository } from '@core/racing/domain/repositories/IDriverRepository';
import { CompleteOnboardingPresenter } from '@apps/api/src/modules/driver/presenters/CompleteOnboardingPresenter';
describe('CompleteDriverOnboardingUseCase', () => {
let useCase: CompleteDriverOnboardingUseCase;
let driverRepository: { findById: any; save: any };
beforeEach(() => {
driverRepository = {
findById: vi.fn(),
save: vi.fn(),
};
useCase = new CompleteDriverOnboardingUseCase(driverRepository as IDriverRepository);
});
describe('execute', () => {
it('should create a new driver and return success', async () => {
const input = {
userId: 'user-123',
firstName: 'John',
lastName: 'Doe',
displayName: 'John Doe',
country: 'US',
timezone: 'America/New_York',
bio: 'Racing enthusiast',
};
driverRepository.findById.mockResolvedValue(null); // Driver doesn't exist
driverRepository.save.mockResolvedValue(undefined);
const presenter = new CompleteOnboardingPresenter();
await useCase.execute(input, presenter);
expect(driverRepository.findById).toHaveBeenCalledWith('user-123');
expect(driverRepository.save).toHaveBeenCalledWith(
expect.objectContaining({
id: 'user-123',
iracingId: 'user-123',
name: 'John Doe',
country: 'US',
bio: 'Racing enthusiast',
})
);
expect(presenter.viewModel).toEqual({
success: true,
driverId: 'user-123',
errorMessage: undefined,
});
});
it('should return error if driver already exists', async () => {
const input = {
userId: 'user-123',
firstName: 'John',
lastName: 'Doe',
displayName: 'John Doe',
country: 'US',
};
const existingDriver = {
id: 'user-123',
name: 'Existing Driver',
};
driverRepository.findById.mockResolvedValue(existingDriver);
const presenter = new CompleteOnboardingPresenter();
await useCase.execute(input, presenter);
expect(driverRepository.findById).toHaveBeenCalledWith('user-123');
expect(driverRepository.save).not.toHaveBeenCalled();
expect(presenter.viewModel).toEqual({
success: false,
driverId: undefined,
errorMessage: 'Driver already exists',
});
});
it('should handle domain validation errors', async () => {
const input = {
userId: 'user-123',
firstName: 'John',
lastName: 'Doe',
displayName: 'John Doe',
country: 'INVALID', // Invalid country code
};
driverRepository.findById.mockResolvedValue(null);
const presenter = new CompleteOnboardingPresenter();
await useCase.execute(input, presenter);
expect(presenter.viewModel.success).toBe(false);
expect(presenter.viewModel.errorMessage).toContain('Country must be a valid ISO code');
});
});
});