view data fixes
Some checks failed
Contract Testing / contract-tests (pull_request) Failing after 5m51s
Contract Testing / contract-snapshot (pull_request) Has been skipped

This commit is contained in:
2026-01-24 12:14:08 +01:00
parent dde77e717a
commit 046852703f
94 changed files with 1333 additions and 4885 deletions

View File

@@ -1,235 +1,104 @@
import { describe, it, expect } from 'vitest';
import { LeagueSponsorshipsViewDataBuilder } from './LeagueSponsorshipsViewDataBuilder';
import type { LeagueSponsorshipsApiDto } from '@/lib/types/tbd/LeagueSponsorshipsApiDto';
describe('LeagueSponsorshipsViewDataBuilder', () => {
describe('happy paths', () => {
it('should transform LeagueSponsorshipsApiDto to LeagueSponsorshipsViewData correctly', () => {
const leagueSponsorshipsApiDto: LeagueSponsorshipsApiDto = {
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,
status: 'available',
currency: 'USD',
isAvailable: true,
},
],
sponsorshipRequests: [
sponsorships: [
{
id: 'request-1',
sponsorId: 'sponsor-1',
sponsorName: 'Test Sponsor',
sponsorLogo: 'logo-url',
message: 'Test message',
requestedAt: '2024-01-01T10:00:00Z',
status: 'pending',
createdAt: '2024-01-01T10:00:00Z',
},
],
};
const result = LeagueSponsorshipsViewDataBuilder.build(leagueSponsorshipsApiDto);
const result = LeagueSponsorshipsViewDataBuilder.build(leagueSponsorshipsApiDto as any);
expect(result).toEqual({
leagueId: 'league-123',
activeTab: 'overview',
onTabChange: expect.any(Function),
league: {
id: 'league-123',
name: 'Test League',
},
sponsorshipSlots: [
{
id: 'slot-1',
name: 'Primary Sponsor',
price: 1000,
status: 'available',
},
],
sponsorshipRequests: [
{
id: 'request-1',
sponsorId: 'sponsor-1',
sponsorName: 'Test Sponsor',
sponsorLogo: 'logo-url',
message: 'Test message',
requestedAt: '2024-01-01T10:00:00Z',
status: 'pending',
formattedRequestedAt: expect.any(String),
statusLabel: expect.any(String),
},
],
});
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: LeagueSponsorshipsApiDto = {
const leagueSponsorshipsApiDto = {
leagueId: 'league-456',
league: {
id: 'league-456',
name: 'Test League',
},
sponsorshipSlots: [
{
id: 'slot-1',
name: 'Primary Sponsor',
price: 1000,
status: 'available',
},
],
sponsorshipRequests: [],
};
const result = LeagueSponsorshipsViewDataBuilder.build(leagueSponsorshipsApiDto);
expect(result.sponsorshipRequests).toHaveLength(0);
});
it('should handle multiple sponsorship requests', () => {
const leagueSponsorshipsApiDto: LeagueSponsorshipsApiDto = {
leagueId: 'league-789',
league: {
id: 'league-789',
name: 'Test League',
description: '',
},
sponsorshipSlots: [],
sponsorshipRequests: [
{
id: 'request-1',
sponsorId: 'sponsor-1',
sponsorName: 'Sponsor 1',
sponsorLogo: 'logo-1',
message: 'Message 1',
requestedAt: '2024-01-01T10:00:00Z',
status: 'pending',
},
{
id: 'request-2',
sponsorId: 'sponsor-2',
sponsorName: 'Sponsor 2',
sponsorLogo: 'logo-2',
message: 'Message 2',
requestedAt: '2024-01-02T10:00:00Z',
status: 'approved',
},
],
sponsorships: [],
};
const result = LeagueSponsorshipsViewDataBuilder.build(leagueSponsorshipsApiDto);
const result = LeagueSponsorshipsViewDataBuilder.build(leagueSponsorshipsApiDto as any);
expect(result.sponsorshipRequests).toHaveLength(2);
expect(result.sponsorshipRequests).toHaveLength(0);
});
});
describe('data transformation', () => {
it('should preserve all DTO fields in the output', () => {
const leagueSponsorshipsApiDto: LeagueSponsorshipsApiDto = {
const leagueSponsorshipsApiDto = {
leagueId: 'league-101',
league: {
id: 'league-101',
name: 'Test League',
description: 'Desc',
},
sponsorshipSlots: [
{
id: 'slot-1',
name: 'Primary Sponsor',
price: 1000,
status: 'available',
},
],
sponsorshipRequests: [
sponsorshipSlots: [],
sponsorships: [
{
id: 'request-1',
sponsorId: 'sponsor-1',
sponsorName: 'Test Sponsor',
sponsorLogo: 'logo-url',
message: 'Test message',
requestedAt: '2024-01-01T10:00:00Z',
status: 'pending',
status: 'approved',
createdAt: '2024-01-01T10:00:00Z',
},
],
};
const result = LeagueSponsorshipsViewDataBuilder.build(leagueSponsorshipsApiDto);
const result = LeagueSponsorshipsViewDataBuilder.build(leagueSponsorshipsApiDto as any);
expect(result.leagueId).toBe(leagueSponsorshipsApiDto.leagueId);
expect(result.league).toEqual(leagueSponsorshipsApiDto.league);
expect(result.sponsorshipSlots).toEqual(leagueSponsorshipsApiDto.sponsorshipSlots);
});
it('should not modify the input DTO', () => {
const leagueSponsorshipsApiDto: LeagueSponsorshipsApiDto = {
const leagueSponsorshipsApiDto = {
leagueId: 'league-102',
league: {
id: 'league-102',
name: 'Test League',
description: '',
},
sponsorshipSlots: [],
sponsorshipRequests: [],
sponsorships: [],
};
const originalDto = { ...leagueSponsorshipsApiDto };
LeagueSponsorshipsViewDataBuilder.build(leagueSponsorshipsApiDto);
const originalDto = JSON.parse(JSON.stringify(leagueSponsorshipsApiDto));
LeagueSponsorshipsViewDataBuilder.build(leagueSponsorshipsApiDto as any);
expect(leagueSponsorshipsApiDto).toEqual(originalDto);
});
});
describe('edge cases', () => {
it('should handle requests without sponsor logo', () => {
const leagueSponsorshipsApiDto: LeagueSponsorshipsApiDto = {
leagueId: 'league-103',
league: {
id: 'league-103',
name: 'Test League',
},
sponsorshipSlots: [],
sponsorshipRequests: [
{
id: 'request-1',
sponsorId: 'sponsor-1',
sponsorName: 'Test Sponsor',
sponsorLogo: null,
message: 'Test message',
requestedAt: '2024-01-01T10:00:00Z',
status: 'pending',
},
],
};
const result = LeagueSponsorshipsViewDataBuilder.build(leagueSponsorshipsApiDto);
expect(result.sponsorshipRequests[0].sponsorLogoUrl).toBeNull();
});
it('should handle requests without message', () => {
const leagueSponsorshipsApiDto: LeagueSponsorshipsApiDto = {
leagueId: 'league-104',
league: {
id: 'league-104',
name: 'Test League',
},
sponsorshipSlots: [],
sponsorshipRequests: [
{
id: 'request-1',
sponsorId: 'sponsor-1',
sponsorName: 'Test Sponsor',
sponsorLogo: 'logo-url',
message: null,
requestedAt: '2024-01-01T10:00:00Z',
status: 'pending',
},
],
};
const result = LeagueSponsorshipsViewDataBuilder.build(leagueSponsorshipsApiDto);
expect(result.sponsorshipRequests[0].message).toBeNull();
});
});
});