import { describe, it, expect, vi } from 'vitest'; import { GetDriverUseCase } from './GetDriverUseCase'; import { Result } from '@core/shared/domain/Result'; import type { DriverRepository } from '../../domain/repositories/DriverRepository'; import type { Driver } from '../../domain/entities/Driver'; describe('GetDriverUseCase', () => { const mockDriverRepository = { findById: vi.fn(), } as unknown as DriverRepository; const useCase = new GetDriverUseCase(mockDriverRepository); it('should return a driver when found', async () => { const mockDriver = { id: 'driver-1', name: 'John Doe' } as unknown as Driver; vi.mocked(mockDriverRepository.findById).mockResolvedValue(mockDriver); const result = await useCase.execute({ driverId: 'driver-1' }); expect(result.isOk()).toBe(true); expect(result.unwrap()).toBe(mockDriver); expect(mockDriverRepository.findById).toHaveBeenCalledWith('driver-1'); }); it('should return null when driver is not found', async () => { vi.mocked(mockDriverRepository.findById).mockResolvedValue(null); const result = await useCase.execute({ driverId: 'non-existent' }); expect(result.isOk()).toBe(true); expect(result.unwrap()).toBeNull(); }); it('should return an error when repository throws', async () => { const error = new Error('Repository error'); vi.mocked(mockDriverRepository.findById).mockRejectedValue(error); const result = await useCase.execute({ driverId: 'driver-1' }); expect(result.isErr()).toBe(true); expect(result.error).toBe(error); }); });