96 lines
2.7 KiB
TypeScript
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);
|
|
});
|
|
});
|
|
});
|