import { describe, it, expect } from 'vitest'; import { CompleteOnboardingViewDataBuilder } from './CompleteOnboardingViewDataBuilder'; import type { CompleteOnboardingOutputDTO } from '@/lib/types/generated/CompleteOnboardingOutputDTO'; describe('CompleteOnboardingViewDataBuilder', () => { describe('happy paths', () => { it('should transform successful onboarding completion DTO to ViewData correctly', () => { const apiDto: CompleteOnboardingOutputDTO = { success: true, driverId: 'driver-123', }; const result = CompleteOnboardingViewDataBuilder.build(apiDto); expect(result).toEqual({ success: true, driverId: 'driver-123', errorMessage: undefined, }); }); it('should handle onboarding completion with error message', () => { const apiDto: CompleteOnboardingOutputDTO = { success: false, driverId: undefined, errorMessage: 'Failed to complete onboarding', }; const result = CompleteOnboardingViewDataBuilder.build(apiDto); expect(result).toEqual({ success: false, driverId: undefined, errorMessage: 'Failed to complete onboarding', }); }); it('should handle onboarding completion with only success field', () => { const apiDto: CompleteOnboardingOutputDTO = { success: true, }; const result = CompleteOnboardingViewDataBuilder.build(apiDto); expect(result).toEqual({ success: true, driverId: undefined, errorMessage: undefined, }); }); }); describe('data transformation', () => { it('should preserve all DTO fields in the output', () => { const apiDto: CompleteOnboardingOutputDTO = { success: true, driverId: 'driver-123', errorMessage: undefined, }; const result = CompleteOnboardingViewDataBuilder.build(apiDto); expect(result.success).toBe(apiDto.success); expect(result.driverId).toBe(apiDto.driverId); expect(result.errorMessage).toBe(apiDto.errorMessage); }); it('should not modify the input DTO', () => { const apiDto: CompleteOnboardingOutputDTO = { success: true, driverId: 'driver-123', errorMessage: undefined, }; const originalDto = { ...apiDto }; CompleteOnboardingViewDataBuilder.build(apiDto); expect(apiDto).toEqual(originalDto); }); }); describe('edge cases', () => { it('should handle false success value', () => { const apiDto: CompleteOnboardingOutputDTO = { success: false, driverId: undefined, errorMessage: 'Error occurred', }; const result = CompleteOnboardingViewDataBuilder.build(apiDto); expect(result.success).toBe(false); expect(result.driverId).toBeUndefined(); expect(result.errorMessage).toBe('Error occurred'); }); it('should handle empty string error message', () => { const apiDto: CompleteOnboardingOutputDTO = { success: false, driverId: undefined, errorMessage: '', }; const result = CompleteOnboardingViewDataBuilder.build(apiDto); expect(result.success).toBe(false); expect(result.errorMessage).toBe(''); }); it('should handle very long driverId', () => { const longDriverId = 'driver-' + 'a'.repeat(1000); const apiDto: CompleteOnboardingOutputDTO = { success: true, driverId: longDriverId, }; const result = CompleteOnboardingViewDataBuilder.build(apiDto); expect(result.driverId).toBe(longDriverId); }); it('should handle special characters in error message', () => { const apiDto: CompleteOnboardingOutputDTO = { success: false, driverId: undefined, errorMessage: 'Error: "Failed to create driver" (code: 500)', }; const result = CompleteOnboardingViewDataBuilder.build(apiDto); expect(result.errorMessage).toBe('Error: "Failed to create driver" (code: 500)'); }); }); describe('derived fields calculation', () => { it('should calculate isSuccessful derived field correctly', () => { const apiDto: CompleteOnboardingOutputDTO = { success: true, driverId: 'driver-123', }; const result = CompleteOnboardingViewDataBuilder.build(apiDto); // Note: The builder doesn't add derived fields, but we can verify the structure expect(result.success).toBe(true); expect(result.driverId).toBe('driver-123'); }); it('should handle success with no driverId', () => { const apiDto: CompleteOnboardingOutputDTO = { success: true, driverId: undefined, }; const result = CompleteOnboardingViewDataBuilder.build(apiDto); expect(result.success).toBe(true); expect(result.driverId).toBeUndefined(); }); it('should handle failure with driverId', () => { const apiDto: CompleteOnboardingOutputDTO = { success: false, driverId: 'driver-123', errorMessage: 'Partial failure', }; const result = CompleteOnboardingViewDataBuilder.build(apiDto); expect(result.success).toBe(false); expect(result.driverId).toBe('driver-123'); expect(result.errorMessage).toBe('Partial failure'); }); }); });