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; save: () => Promise }; 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'); }); }); });