63 lines
2.3 KiB
TypeScript
63 lines
2.3 KiB
TypeScript
import { describe, it, expect } 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);
|
|
});
|
|
});
|