105 lines
3.1 KiB
TypeScript
105 lines
3.1 KiB
TypeScript
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);
|
|
});
|
|
});
|
|
});
|