57 lines
1.8 KiB
TypeScript
57 lines
1.8 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { SponsorshipDetailViewModel } from './SponsorshipDetailViewModel';
|
|
|
|
describe('SponsorshipDetailViewModel', () => {
|
|
const dto = {
|
|
id: 'detail-1',
|
|
leagueId: 'league-1',
|
|
leagueName: 'Pro League',
|
|
seasonId: 'season-1',
|
|
seasonName: 'Season 1',
|
|
} as any;
|
|
|
|
it('maps core identifiers from generated DTO', () => {
|
|
const vm = new SponsorshipDetailViewModel(dto);
|
|
|
|
expect(vm.id).toBe(dto.id);
|
|
expect(vm.leagueId).toBe(dto.leagueId);
|
|
expect(vm.leagueName).toBe(dto.leagueName);
|
|
expect(vm.seasonId).toBe(dto.seasonId);
|
|
expect(vm.seasonName).toBe(dto.seasonName);
|
|
});
|
|
|
|
it('uses default UI-specific sponsorship fields and formatting', () => {
|
|
const vm = new SponsorshipDetailViewModel(dto);
|
|
|
|
expect(vm.tier).toBe('secondary');
|
|
expect(vm.status).toBe('active');
|
|
expect(vm.amount).toBe(0);
|
|
expect(vm.currency).toBe('USD');
|
|
|
|
expect(vm.formattedAmount).toBe('USD 0');
|
|
expect(vm.tierBadgeVariant).toBe('secondary');
|
|
expect(vm.statusColor).toBe('green');
|
|
expect(vm.statusDisplay).toBe('Active');
|
|
});
|
|
|
|
it('derives badge variant and status styling from status and tier', () => {
|
|
const main = new SponsorshipDetailViewModel(dto);
|
|
main.tier = 'main';
|
|
main.status = 'pending';
|
|
main.amount = 5_000;
|
|
|
|
expect(main.tierBadgeVariant).toBe('primary');
|
|
expect(main.statusColor).toBe('yellow');
|
|
expect(main.statusDisplay).toBe('Pending');
|
|
expect(main.formattedAmount).toBe('USD 5,000');
|
|
|
|
const expired = new SponsorshipDetailViewModel(dto);
|
|
expired.status = 'expired';
|
|
expect(expired.statusColor).toBe('red');
|
|
|
|
const unknown = new SponsorshipDetailViewModel(dto);
|
|
unknown.status = 'unknown' as any;
|
|
expect(unknown.statusColor).toBe('gray');
|
|
});
|
|
});
|