Files
gridpilot.gg/apps/website/lib/builders/view-data/LeagueSettingsViewDataBuilder.test.ts
Marc Mintel 046852703f
Some checks failed
Contract Testing / contract-tests (pull_request) Failing after 5m51s
Contract Testing / contract-snapshot (pull_request) Has been skipped
view data fixes
2026-01-24 12:14:08 +01:00

132 lines
3.3 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { LeagueSettingsViewDataBuilder } from './LeagueSettingsViewDataBuilder';
describe('LeagueSettingsViewDataBuilder', () => {
describe('happy paths', () => {
it('should transform LeagueSettingsInputDTO to LeagueSettingsViewData correctly', () => {
const leagueSettingsApiDto = {
league: {
id: 'league-123',
name: 'Test League',
ownerId: 'owner-1',
createdAt: '2024-01-01',
},
config: {
maxDrivers: 32,
},
presets: [],
owner: null,
members: [],
};
const result = LeagueSettingsViewDataBuilder.build(leagueSettingsApiDto);
expect(result).toEqual({
league: {
id: 'league-123',
name: 'Test League',
ownerId: 'owner-1',
createdAt: '2024-01-01',
},
config: {
maxDrivers: 32,
},
presets: [],
owner: null,
members: [],
});
});
it('should handle minimal configuration', () => {
const leagueSettingsApiDto = {
league: {
id: 'league-456',
name: 'Minimal League',
ownerId: 'owner-2',
createdAt: '2024-01-02',
},
config: {
maxDrivers: 16,
},
presets: [],
owner: null,
members: [],
};
const result = LeagueSettingsViewDataBuilder.build(leagueSettingsApiDto);
expect(result.league.name).toBe('Minimal League');
expect(result.config.maxDrivers).toBe(16);
});
});
describe('data transformation', () => {
it('should preserve all DTO fields in the output', () => {
const leagueSettingsApiDto = {
league: {
id: 'league-789',
name: 'Full League',
ownerId: 'owner-3',
createdAt: '2024-01-03',
},
config: {
maxDrivers: 24,
},
presets: [],
owner: null,
members: [],
};
const result = LeagueSettingsViewDataBuilder.build(leagueSettingsApiDto);
expect(result.league).toEqual(leagueSettingsApiDto.league);
expect(result.config).toEqual(leagueSettingsApiDto.config);
});
it('should not modify the input DTO', () => {
const leagueSettingsApiDto = {
league: {
id: 'league-101',
name: 'Test League',
ownerId: 'owner-4',
createdAt: '2024-01-04',
},
config: {
maxDrivers: 20,
},
presets: [],
owner: null,
members: [],
};
const originalDto = JSON.parse(JSON.stringify(leagueSettingsApiDto));
LeagueSettingsViewDataBuilder.build(leagueSettingsApiDto);
expect(leagueSettingsApiDto).toEqual(originalDto);
});
});
describe('edge cases', () => {
it('should handle large driver counts', () => {
const leagueSettingsApiDto = {
league: {
id: 'league-103',
name: 'Test League',
ownerId: 'owner-5',
createdAt: '2024-01-05',
},
config: {
maxDrivers: 100,
},
presets: [],
owner: null,
members: [],
};
const result = LeagueSettingsViewDataBuilder.build(leagueSettingsApiDto);
expect(result.config.maxDrivers).toBe(100);
});
});
});