Files
gridpilot.gg/apps/website/lib/view-models/SponsorViewModel.test.ts
Marc Mintel 6c07abe5e7
Some checks failed
Contract Testing / contract-snapshot (pull_request) Has been cancelled
Contract Testing / contract-tests (pull_request) Has been cancelled
view data fixes
2026-01-25 00:12:30 +01:00

47 lines
1.4 KiB
TypeScript

import { describe, expect, it } 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(vm.logoUrl).toBeUndefined();
expect(vm.websiteUrl).toBeUndefined();
});
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');
});
});