Files
gridpilot.gg/apps/website/lib/view-models/SponsorshipPricingViewModel.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

40 lines
1.4 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { SponsorshipPricingViewModel } from './SponsorshipPricingViewModel';
describe('SponsorshipPricingViewModel', () => {
const dto = {
mainSlotPrice: 10_000,
secondarySlotPrice: 6_000,
currency: 'USD',
} as any;
it('maps basic pricing fields from DTO', () => {
const vm = new SponsorshipPricingViewModel(dto);
expect(vm.mainSlotPrice).toBe(dto.mainSlotPrice);
expect(vm.secondarySlotPrice).toBe(dto.secondarySlotPrice);
expect(vm.currency).toBe(dto.currency);
});
it('exposes formatted prices and price difference', () => {
const vm = new SponsorshipPricingViewModel(dto);
expect(vm.formattedMainSlotPrice).toBe('$10,000.00');
expect(vm.formattedSecondarySlotPrice).toBe('$6,000.00');
const expectedDiff = dto.mainSlotPrice - dto.secondarySlotPrice;
expect(vm.priceDifference).toBe(expectedDiff);
expect(vm.formattedPriceDifference).toBe('$4,000.00');
});
it('computes discount percentage for secondary slots', () => {
const vm = new SponsorshipPricingViewModel(dto);
const expectedDiscount = Math.round((1 - dto.secondarySlotPrice / dto.mainSlotPrice) * 100);
expect(vm.secondaryDiscountPercentage).toBe(expectedDiscount);
const zeroMain = new SponsorshipPricingViewModel({ ...dto, mainSlotPrice: 0 });
expect(zeroMain.secondaryDiscountPercentage).toBe(0);
});
});