Files
gridpilot.gg/apps/website/lib/view-models/AvatarViewModel.test.ts
Marc Mintel d97f50ed72
Some checks failed
Contract Testing / contract-tests (pull_request) Failing after 6m4s
Contract Testing / contract-snapshot (pull_request) Has been skipped
view data fixes
2026-01-23 11:59:49 +01:00

113 lines
3.4 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { AvatarViewModel } from './AvatarViewModel';
import type { AvatarViewData } from '@/lib/view-data/AvatarViewData';
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);
});
});
});