47 lines
1.4 KiB
TypeScript
47 lines
1.4 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { SponsorViewModel } from './SponsorViewModel';
|
|
|
|
describe('SponsorViewModel', () => {
|
|
it('maps basic sponsor fields from DTO', () => {
|
|
const dto = {
|
|
id: 'sp-1',
|
|
name: 'Acme Corp',
|
|
logoUrl: '/logo.png',
|
|
websiteUrl: 'https://acme.example',
|
|
};
|
|
|
|
const vm = new SponsorViewModel(dto as any);
|
|
|
|
expect(vm.id).toBe(dto.id);
|
|
expect(vm.name).toBe(dto.name);
|
|
expect(vm.logoUrl).toBe(dto.logoUrl);
|
|
expect(vm.websiteUrl).toBe(dto.websiteUrl);
|
|
});
|
|
|
|
it('does not assign optional fields when they are undefined', () => {
|
|
const dto = {
|
|
id: 'sp-2',
|
|
name: 'Minimal Sponsor',
|
|
logoUrl: undefined,
|
|
websiteUrl: undefined,
|
|
};
|
|
|
|
const vm = new SponsorViewModel(dto as any);
|
|
|
|
expect(vm.id).toBe(dto.id);
|
|
expect(vm.name).toBe(dto.name);
|
|
expect('logoUrl' in vm).toBe(false);
|
|
expect('websiteUrl' in vm).toBe(false);
|
|
});
|
|
|
|
it('exposes simple UI helpers', () => {
|
|
const withWebsite = new SponsorViewModel({ id: 'sp-3', name: 'With Site', websiteUrl: 'https://example.com' } as any);
|
|
const withoutWebsite = new SponsorViewModel({ id: 'sp-4', name: 'No Site' } as any);
|
|
|
|
expect(withWebsite.displayName).toBe(withWebsite.name);
|
|
expect(withWebsite.hasWebsite).toBe(true);
|
|
expect(withoutWebsite.hasWebsite).toBe(false);
|
|
expect(withWebsite.websiteLinkText).toBe('Visit Website');
|
|
});
|
|
});
|