view data tests
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
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);
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user