import { describe, it, expect } from 'vitest'; import { DeleteMediaViewDataBuilder } from './DeleteMediaViewDataBuilder'; import type { DeleteMediaOutputDTO } from '@/lib/types/generated/DeleteMediaOutputDTO'; describe('DeleteMediaViewDataBuilder', () => { describe('happy paths', () => { it('should transform successful deletion DTO to ViewData correctly', () => { const apiDto: DeleteMediaOutputDTO = { success: true, }; const result = DeleteMediaViewDataBuilder.build(apiDto); expect(result).toEqual({ success: true, error: undefined, }); }); it('should handle deletion with error message', () => { const apiDto: DeleteMediaOutputDTO = { success: false, error: 'Failed to delete media', }; const result = DeleteMediaViewDataBuilder.build(apiDto); expect(result).toEqual({ success: false, error: 'Failed to delete media', }); }); it('should handle deletion with only success field', () => { const apiDto: DeleteMediaOutputDTO = { success: true, }; const result = DeleteMediaViewDataBuilder.build(apiDto); expect(result).toEqual({ success: true, error: undefined, }); }); }); describe('data transformation', () => { it('should preserve all DTO fields in the output', () => { const apiDto: DeleteMediaOutputDTO = { success: false, error: 'Something went wrong', }; const result = DeleteMediaViewDataBuilder.build(apiDto); expect(result.success).toBe(apiDto.success); expect(result.error).toBe(apiDto.error); }); it('should not modify the input DTO', () => { const apiDto: DeleteMediaOutputDTO = { success: false, error: 'Error', }; const originalDto = { ...apiDto }; DeleteMediaViewDataBuilder.build(apiDto); expect(apiDto).toEqual(originalDto); }); }); describe('edge cases', () => { it('should handle false success value', () => { const apiDto: DeleteMediaOutputDTO = { success: false, error: 'Error occurred', }; const result = DeleteMediaViewDataBuilder.build(apiDto); expect(result.success).toBe(false); expect(result.error).toBe('Error occurred'); }); it('should handle empty string error message', () => { const apiDto: DeleteMediaOutputDTO = { success: false, error: '', }; const result = DeleteMediaViewDataBuilder.build(apiDto); expect(result.success).toBe(false); expect(result.error).toBe(''); }); it('should handle very long error message', () => { const longError = 'Error: ' + 'a'.repeat(1000); const apiDto: DeleteMediaOutputDTO = { success: false, error: longError, }; const result = DeleteMediaViewDataBuilder.build(apiDto); expect(result.error).toBe(longError); }); it('should handle special characters in error message', () => { const apiDto: DeleteMediaOutputDTO = { success: false, error: 'Error: "Failed to delete media" (code: 500)', }; const result = DeleteMediaViewDataBuilder.build(apiDto); expect(result.error).toBe('Error: "Failed to delete media" (code: 500)'); }); }); });