view data fixes
This commit is contained in:
@@ -1,53 +1,113 @@
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { AvatarViewModel } from './AvatarViewModel';
|
||||
import type { AvatarViewData } from '@/lib/view-data/AvatarViewData';
|
||||
|
||||
describe('AvatarViewModel', () => {
|
||||
it('should create instance with driverId and avatarUrl', () => {
|
||||
const dto = {
|
||||
driverId: 'driver-123',
|
||||
avatarUrl: 'https://example.com/avatar.jpg',
|
||||
};
|
||||
describe('constructor', () => {
|
||||
it('should create instance with valid AvatarViewData', () => {
|
||||
const viewData: AvatarViewData = {
|
||||
buffer: 'dGVzdC1pbWFnZS1kYXRh',
|
||||
contentType: 'image/png',
|
||||
};
|
||||
|
||||
const viewModel = new AvatarViewModel(dto);
|
||||
const viewModel = new AvatarViewModel(viewData);
|
||||
|
||||
expect(viewModel.driverId).toBe('driver-123');
|
||||
expect(viewModel.avatarUrl).toBe('https://example.com/avatar.jpg');
|
||||
});
|
||||
|
||||
it('should create instance without avatarUrl', () => {
|
||||
const dto = {
|
||||
driverId: 'driver-123',
|
||||
};
|
||||
|
||||
const viewModel = new AvatarViewModel(dto);
|
||||
|
||||
expect(viewModel.driverId).toBe('driver-123');
|
||||
expect(viewModel.avatarUrl).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should return true for hasAvatar when avatarUrl exists', () => {
|
||||
const viewModel = new AvatarViewModel({
|
||||
driverId: 'driver-123',
|
||||
avatarUrl: 'https://example.com/avatar.jpg',
|
||||
expect(viewModel.bufferBase64).toBe('dGVzdC1pbWFnZS1kYXRh');
|
||||
expect(viewModel.contentTypeLabel).toBe('PNG');
|
||||
expect(viewModel.hasValidData).toBe(true);
|
||||
});
|
||||
|
||||
expect(viewModel.hasAvatar).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);
|
||||
});
|
||||
});
|
||||
|
||||
it('should return false for hasAvatar when avatarUrl is undefined', () => {
|
||||
const viewModel = new AvatarViewModel({
|
||||
driverId: 'driver-123',
|
||||
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==');
|
||||
});
|
||||
|
||||
expect(viewModel.hasAvatar).toBe(false);
|
||||
});
|
||||
it('should derive contentTypeLabel correctly', () => {
|
||||
const viewData: AvatarViewData = {
|
||||
buffer: 'dGVzdC1pbWFnZS1kYXRh',
|
||||
contentType: 'image/png',
|
||||
};
|
||||
|
||||
it('should return false for hasAvatar when avatarUrl is empty string', () => {
|
||||
const viewModel = new AvatarViewModel({
|
||||
driverId: 'driver-123',
|
||||
avatarUrl: '',
|
||||
const viewModel = new AvatarViewModel(viewData);
|
||||
|
||||
expect(viewModel.contentTypeLabel).toBe('PNG');
|
||||
});
|
||||
|
||||
expect(viewModel.hasAvatar).toBe(false);
|
||||
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);
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user