import { describe, it, expect } from 'vitest'; import { MediaViewModel } from './MediaViewModel'; import type { MediaViewData } from '@/lib/view-data/MediaViewData'; describe('MediaViewModel', () => { it('creates instance from asset ViewData', () => { const asset: MediaViewData['assets'][number] = { id: 'media-123', src: 'https://example.com/image.jpg', title: 'Race Day Photo', category: 'avatar', date: '2023-01-15', dimensions: '1920×1080', }; const viewModel = new MediaViewModel(asset); expect(viewModel.id).toBe('media-123'); expect(viewModel.src).toBe('https://example.com/image.jpg'); expect(viewModel.title).toBe('Race Day Photo'); expect(viewModel.category).toBe('avatar'); expect(viewModel.date).toBe('2023-01-15'); expect(viewModel.dimensions).toBe('1920×1080'); }); it('subtitle matches MediaCard subtitle formatting', () => { const asset: MediaViewData['assets'][number] = { id: 'media-123', src: 'https://example.com/image.jpg', title: 'Race Day Photo', category: 'avatar', dimensions: '1920×1080', }; const viewModel = new MediaViewModel(asset); expect(viewModel.subtitle).toBe('avatar • 1920×1080'); }); it('subtitle omits dimensions when missing', () => { const asset: MediaViewData['assets'][number] = { id: 'media-123', src: 'https://example.com/image.jpg', title: 'Race Day Photo', category: 'avatar', }; const viewModel = new MediaViewModel(asset); expect(viewModel.subtitle).toBe('avatar'); }); it('hasMetadata reflects presence of date or dimensions', () => { const noMeta = new MediaViewModel({ id: '1', src: 'a.jpg', title: 'A', category: 'misc', }); const withDate = new MediaViewModel({ id: '2', src: 'b.jpg', title: 'B', category: 'misc', date: '2023-01-15', }); const withDimensions = new MediaViewModel({ id: '3', src: 'c.jpg', title: 'C', category: 'misc', dimensions: '800×600', }); expect(noMeta.hasMetadata).toBe(false); expect(withDate.hasMetadata).toBe(true); expect(withDimensions.hasMetadata).toBe(true); }); });