Files
gridpilot.gg/apps/website/lib/view-models/RenewalAlertViewModel.test.ts
2026-01-24 01:25:46 +01:00

63 lines
2.3 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { RenewalAlertViewModel } from './RenewalAlertViewModel';
describe('RenewalAlertViewModel', () => {
it('maps core fields and derives formatted price and date', () => {
const vm = new RenewalAlertViewModel({
id: 'ren-1',
name: 'League Sponsorship',
type: 'league',
renewDate: '2024-01-15',
price: 100,
});
expect(vm.id).toBe('ren-1');
expect(vm.name).toBe('League Sponsorship');
expect(vm.type).toBe('league');
expect(vm.formattedPrice).toBe('$100');
expect(typeof vm.formattedRenewDate).toBe('string');
});
it('maps type to icon name', () => {
const league = new RenewalAlertViewModel({ id: '1', name: 'A', type: 'league', renewDate: '2024-01-01', price: 0 });
const team = new RenewalAlertViewModel({ id: '2', name: 'B', type: 'team', renewDate: '2024-01-01', price: 0 });
const driver = new RenewalAlertViewModel({ id: '3', name: 'C', type: 'driver', renewDate: '2024-01-01', price: 0 });
const race = new RenewalAlertViewModel({ id: '4', name: 'D', type: 'race', renewDate: '2024-01-01', price: 0 });
const platform = new RenewalAlertViewModel({ id: '5', name: 'E', type: 'platform', renewDate: '2024-01-01', price: 0 });
expect(league.typeIcon).toBe('Trophy');
expect(team.typeIcon).toBe('Users');
expect(driver.typeIcon).toBe('Car');
expect(race.typeIcon).toBe('Flag');
expect(platform.typeIcon).toBe('Megaphone');
});
it('computes daysUntilRenewal and urgency flag based on current date', () => {
const now = new Date();
const soon = new Date(now.getTime() + 10 * 24 * 60 * 60 * 1000);
const later = new Date(now.getTime() + 40 * 24 * 60 * 60 * 1000);
const soonAlert = new RenewalAlertViewModel({
id: 'soon',
name: 'Soon',
type: 'league',
renewDate: soon.toISOString(),
price: 0,
});
const laterAlert = new RenewalAlertViewModel({
id: 'later',
name: 'Later',
type: 'league',
renewDate: later.toISOString(),
price: 0,
});
expect(soonAlert.daysUntilRenewal).toBeGreaterThan(0);
expect(soonAlert.isUrgent).toBe(true);
expect(laterAlert.daysUntilRenewal).toBeGreaterThan(30);
expect(laterAlert.isUrgent).toBe(false);
});
});