import type { AvatarViewData } from '@/lib/view-data/AvatarViewData'; import { describe, expect, it } from 'vitest'; import { AvatarViewModel } from './AvatarViewModel'; describe('AvatarViewModel', () => { describe('constructor', () => { it('should create instance with valid AvatarViewData', () => { const viewData: AvatarViewData = { buffer: 'dGVzdC1pbWFnZS1kYXRh', contentType: 'image/png', }; const viewModel = new AvatarViewModel(viewData); expect(viewModel.bufferBase64).toBe('dGVzdC1pbWFnZS1kYXRh'); expect(viewModel.contentTypeLabel).toBe('PNG'); expect(viewModel.hasValidData).toBe(true); }); it('should create instance with empty buffer', () => { const viewData: AvatarViewData = { buffer: '', contentType: 'image/png', }; const viewModel = new AvatarViewModel(viewData); expect(viewModel.bufferBase64).toBe(''); expect(viewModel.contentTypeLabel).toBe('PNG'); expect(viewModel.hasValidData).toBe(false); }); }); describe('derived fields', () => { it('should derive bufferBase64 correctly', () => { const viewData: AvatarViewData = { buffer: 'dGVzdA==', contentType: 'image/png', }; const viewModel = new AvatarViewModel(viewData); expect(viewModel.bufferBase64).toBe('dGVzdA=='); }); it('should derive contentTypeLabel correctly', () => { const viewData: AvatarViewData = { buffer: 'dGVzdC1pbWFnZS1kYXRh', contentType: 'image/png', }; const viewModel = new AvatarViewModel(viewData); expect(viewModel.contentTypeLabel).toBe('PNG'); }); it('should derive contentTypeLabel for different content types', () => { const pngViewData: AvatarViewData = { buffer: 'dGVzdC1pbWFnZS1kYXRh', contentType: 'image/png', }; const pngViewModel = new AvatarViewModel(pngViewData); expect(pngViewModel.contentTypeLabel).toBe('PNG'); const jpegViewData: AvatarViewData = { buffer: 'dGVzdC1pbWFnZS1kYXRh', contentType: 'image/jpeg', }; const jpegViewModel = new AvatarViewModel(jpegViewData); expect(jpegViewModel.contentTypeLabel).toBe('JPEG'); const svgViewData: AvatarViewData = { buffer: 'dGVzdC1pbWFnZS1kYXRh', contentType: 'image/svg+xml', }; const svgViewModel = new AvatarViewModel(svgViewData); expect(svgViewModel.contentTypeLabel).toBe('SVG+XML'); }); it('should derive hasValidData as true when buffer has content', () => { const viewData: AvatarViewData = { buffer: 'dGVzdC1pbWFnZS1kYXRh', contentType: 'image/png', }; const viewModel = new AvatarViewModel(viewData); expect(viewModel.hasValidData).toBe(true); }); it('should derive hasValidData as false when buffer is empty', () => { const viewData: AvatarViewData = { buffer: '', contentType: 'image/png', }; const viewModel = new AvatarViewModel(viewData); expect(viewModel.hasValidData).toBe(false); }); it('should derive hasValidData as false when contentType is empty', () => { const viewData: AvatarViewData = { buffer: 'dGVzdC1pbWFnZS1kYXRh', contentType: '', }; const viewModel = new AvatarViewModel(viewData); expect(viewModel.hasValidData).toBe(false); }); }); });