Files
gridpilot.gg/apps/website/lib/builders/view-data/SponsorDashboardViewDataBuilder.test.ts
Marc Mintel 1f4f837282
Some checks failed
Contract Testing / contract-tests (pull_request) Failing after 5m58s
Contract Testing / contract-snapshot (pull_request) Has been skipped
view data tests
2026-01-22 18:06:46 +01:00

96 lines
2.7 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { SponsorDashboardViewDataBuilder } from './SponsorDashboardViewDataBuilder';
import type { SponsorDashboardDTO } from '@/lib/types/generated/SponsorDashboardDTO';
describe('SponsorDashboardViewDataBuilder', () => {
describe('happy paths', () => {
it('should transform SponsorDashboardDTO to SponsorDashboardViewData correctly', () => {
const apiDto: SponsorDashboardDTO = {
sponsorName: 'Test Sponsor',
metrics: {
impressions: 5000,
viewers: 1000,
exposure: 500,
},
investment: {
activeSponsorships: 5,
totalSpent: 5000,
},
sponsorships: [],
};
const result = SponsorDashboardViewDataBuilder.build(apiDto);
expect(result.sponsorName).toBe('Test Sponsor');
expect(result.totalImpressions).toBe('5,000');
expect(result.totalInvestment).toBe('$5,000.00');
expect(result.activeSponsorships).toBe(5);
expect(result.metrics.impressionsChange).toBe(15);
});
it('should handle low impressions correctly', () => {
const apiDto: SponsorDashboardDTO = {
sponsorName: 'Test Sponsor',
metrics: {
impressions: 500,
viewers: 100,
exposure: 50,
},
investment: {
activeSponsorships: 1,
totalSpent: 1000,
},
sponsorships: [],
};
const result = SponsorDashboardViewDataBuilder.build(apiDto);
expect(result.metrics.impressionsChange).toBe(-5);
});
});
describe('data transformation', () => {
it('should preserve all DTO fields in the output', () => {
const apiDto: SponsorDashboardDTO = {
sponsorName: 'Test Sponsor',
metrics: {
impressions: 5000,
viewers: 1000,
exposure: 500,
},
investment: {
activeSponsorships: 5,
totalSpent: 5000,
},
sponsorships: [],
};
const result = SponsorDashboardViewDataBuilder.build(apiDto);
expect(result.sponsorName).toBe(apiDto.sponsorName);
expect(result.activeSponsorships).toBe(apiDto.investment.activeSponsorships);
});
it('should not modify the input DTO', () => {
const apiDto: SponsorDashboardDTO = {
sponsorName: 'Test Sponsor',
metrics: {
impressions: 5000,
viewers: 1000,
exposure: 500,
},
investment: {
activeSponsorships: 5,
totalSpent: 5000,
},
sponsorships: [],
};
const originalDto = JSON.parse(JSON.stringify(apiDto));
SponsorDashboardViewDataBuilder.build(apiDto);
expect(apiDto).toEqual(originalDto);
});
});
});