113 lines
3.4 KiB
TypeScript
113 lines
3.4 KiB
TypeScript
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);
|
|
});
|
|
});
|
|
}); |