import { describe, it, expect } from 'vitest'; import { LeagueSponsorshipsViewDataBuilder } from './LeagueSponsorshipsViewDataBuilder'; describe('LeagueSponsorshipsViewDataBuilder', () => { describe('happy paths', () => { it('should transform LeagueSponsorshipsInputDTO to LeagueSponsorshipsViewData correctly', () => { const leagueSponsorshipsApiDto = { leagueId: 'league-123', league: { id: 'league-123', name: 'Test League', description: 'Test Description', }, sponsorshipSlots: [ { id: 'slot-1', name: 'Primary Sponsor', description: 'Main sponsor', price: 1000, currency: 'USD', isAvailable: true, }, ], sponsorships: [ { id: 'request-1', status: 'pending', createdAt: '2024-01-01T10:00:00Z', }, ], }; const result = LeagueSponsorshipsViewDataBuilder.build(leagueSponsorshipsApiDto as any); expect(result.leagueId).toBe('league-123'); expect(result.league.name).toBe('Test League'); expect(result.sponsorshipSlots).toHaveLength(1); expect(result.sponsorshipRequests).toHaveLength(1); expect(result.sponsorshipRequests[0].id).toBe('request-1'); expect(result.sponsorshipRequests[0].status).toBe('pending'); }); it('should handle empty sponsorship requests', () => { const leagueSponsorshipsApiDto = { leagueId: 'league-456', league: { id: 'league-456', name: 'Test League', description: '', }, sponsorshipSlots: [], sponsorships: [], }; const result = LeagueSponsorshipsViewDataBuilder.build(leagueSponsorshipsApiDto as any); expect(result.sponsorshipRequests).toHaveLength(0); }); }); describe('data transformation', () => { it('should preserve all DTO fields in the output', () => { const leagueSponsorshipsApiDto = { leagueId: 'league-101', league: { id: 'league-101', name: 'Test League', description: 'Desc', }, sponsorshipSlots: [], sponsorships: [ { id: 'request-1', status: 'approved', createdAt: '2024-01-01T10:00:00Z', }, ], }; const result = LeagueSponsorshipsViewDataBuilder.build(leagueSponsorshipsApiDto as any); expect(result.leagueId).toBe(leagueSponsorshipsApiDto.leagueId); expect(result.league).toEqual(leagueSponsorshipsApiDto.league); }); it('should not modify the input DTO', () => { const leagueSponsorshipsApiDto = { leagueId: 'league-102', league: { id: 'league-102', name: 'Test League', description: '', }, sponsorshipSlots: [], sponsorships: [], }; const originalDto = JSON.parse(JSON.stringify(leagueSponsorshipsApiDto)); LeagueSponsorshipsViewDataBuilder.build(leagueSponsorshipsApiDto as any); expect(leagueSponsorshipsApiDto).toEqual(originalDto); }); }); });