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); }); }); });