102 lines
3.2 KiB
TypeScript
102 lines
3.2 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: () => Promise<any>; save: () => Promise<void> };
|
|
|
|
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');
|
|
});
|
|
});
|
|
}); |