Files
gridpilot.gg/apps/website/lib/view-models/SponsorshipRequestViewModel.test.ts
2025-12-20 00:31:31 +01:00

61 lines
2.2 KiB
TypeScript

import { describe, it, expect, vi } from 'vitest';
import { SponsorshipRequestViewModel } from './SponsorshipRequestViewModel';
describe('SponsorshipRequestViewModel', () => {
const baseDto = {
id: 'req-1',
sponsorId: 'sp-1',
sponsorName: 'Acme Corp',
sponsorLogo: '/logo.png',
tier: 'main' as const,
offeredAmount: 50_000,
currency: 'USD',
formattedAmount: 'USD 50,000',
message: 'We would like to sponsor your league',
createdAt: new Date('2025-01-10T00:00:00Z'),
platformFee: 5_000,
netAmount: 45_000,
};
it('maps DTO fields and keeps date instance', () => {
const vm = new SponsorshipRequestViewModel(baseDto as any);
expect(vm.id).toBe(baseDto.id);
expect(vm.sponsorId).toBe(baseDto.sponsorId);
expect(vm.sponsorName).toBe(baseDto.sponsorName);
expect(vm.sponsorLogo).toBe(baseDto.sponsorLogo);
expect(vm.tier).toBe(baseDto.tier);
expect(vm.offeredAmount).toBe(baseDto.offeredAmount);
expect(vm.currency).toBe(baseDto.currency);
expect(vm.formattedAmount).toBe(baseDto.formattedAmount);
expect(vm.message).toBe(baseDto.message);
expect(vm.createdAt).toBeInstanceOf(Date);
expect(vm.platformFee).toBe(baseDto.platformFee);
expect(vm.netAmount).toBe(baseDto.netAmount);
});
it('formats created date for UI display', () => {
const fixedNow = new Date('2025-01-10T00:00:00Z');
vi.setSystemTime(fixedNow);
const vm = new SponsorshipRequestViewModel(baseDto as any);
const formatted = vm.formattedDate;
expect(typeof formatted).toBe('string');
expect(formatted.length).toBeGreaterThan(0);
vi.useRealTimers();
});
it('exposes net amount in dollars and tier helpers', () => {
const vmMain = new SponsorshipRequestViewModel(baseDto as any);
expect(vmMain.netAmountDollars).toBe(`$${(baseDto.netAmount / 100).toFixed(2)}`);
expect(vmMain.tierDisplay).toBe('Main Sponsor');
expect(vmMain.tierBadgeVariant).toBe('primary');
const vmSecondary = new SponsorshipRequestViewModel({ ...baseDto, tier: 'secondary' } as any);
expect(vmSecondary.tierDisplay).toBe('Secondary');
expect(vmSecondary.tierBadgeVariant).toBe('secondary');
});
});