168 lines
5.0 KiB
TypeScript
168 lines
5.0 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { HomeViewDataBuilder } from './HomeViewDataBuilder';
|
|
import type { HomeDataDTO } from '@/lib/types/dtos/HomeDataDTO';
|
|
|
|
describe('HomeViewDataBuilder', () => {
|
|
describe('happy paths', () => {
|
|
it('should transform HomeDataDTO to HomeViewData correctly', () => {
|
|
const homeDataDto: HomeDataDTO = {
|
|
isAlpha: true,
|
|
upcomingRaces: [
|
|
{
|
|
id: 'race-1',
|
|
name: 'Test Race',
|
|
scheduledAt: '2024-01-01T10:00:00Z',
|
|
track: 'Test Track',
|
|
},
|
|
],
|
|
topLeagues: [
|
|
{
|
|
id: 'league-1',
|
|
name: 'Test League',
|
|
description: 'Test Description',
|
|
},
|
|
],
|
|
teams: [
|
|
{
|
|
id: 'team-1',
|
|
name: 'Test Team',
|
|
tag: 'TT',
|
|
},
|
|
],
|
|
};
|
|
|
|
const result = HomeViewDataBuilder.build(homeDataDto);
|
|
|
|
expect(result).toEqual({
|
|
isAlpha: true,
|
|
upcomingRaces: [
|
|
{
|
|
id: 'race-1',
|
|
name: 'Test Race',
|
|
scheduledAt: '2024-01-01T10:00:00Z',
|
|
track: 'Test Track',
|
|
},
|
|
],
|
|
topLeagues: [
|
|
{
|
|
id: 'league-1',
|
|
name: 'Test League',
|
|
description: 'Test Description',
|
|
},
|
|
],
|
|
teams: [
|
|
{
|
|
id: 'team-1',
|
|
name: 'Test Team',
|
|
tag: 'TT',
|
|
},
|
|
],
|
|
});
|
|
});
|
|
|
|
it('should handle empty arrays correctly', () => {
|
|
const homeDataDto: HomeDataDTO = {
|
|
isAlpha: false,
|
|
upcomingRaces: [],
|
|
topLeagues: [],
|
|
teams: [],
|
|
};
|
|
|
|
const result = HomeViewDataBuilder.build(homeDataDto);
|
|
|
|
expect(result).toEqual({
|
|
isAlpha: false,
|
|
upcomingRaces: [],
|
|
topLeagues: [],
|
|
teams: [],
|
|
});
|
|
});
|
|
|
|
it('should handle multiple items in arrays', () => {
|
|
const homeDataDto: HomeDataDTO = {
|
|
isAlpha: true,
|
|
upcomingRaces: [
|
|
{ id: 'race-1', name: 'Race 1', scheduledAt: '2024-01-01T10:00:00Z', track: 'Track 1' },
|
|
{ id: 'race-2', name: 'Race 2', scheduledAt: '2024-01-02T10:00:00Z', track: 'Track 2' },
|
|
],
|
|
topLeagues: [
|
|
{ id: 'league-1', name: 'League 1', description: 'Description 1' },
|
|
{ id: 'league-2', name: 'League 2', description: 'Description 2' },
|
|
],
|
|
teams: [
|
|
{ id: 'team-1', name: 'Team 1', tag: 'T1' },
|
|
{ id: 'team-2', name: 'Team 2', tag: 'T2' },
|
|
],
|
|
};
|
|
|
|
const result = HomeViewDataBuilder.build(homeDataDto);
|
|
|
|
expect(result.upcomingRaces).toHaveLength(2);
|
|
expect(result.topLeagues).toHaveLength(2);
|
|
expect(result.teams).toHaveLength(2);
|
|
});
|
|
});
|
|
|
|
describe('data transformation', () => {
|
|
it('should preserve all DTO fields in the output', () => {
|
|
const homeDataDto: HomeDataDTO = {
|
|
isAlpha: true,
|
|
upcomingRaces: [{ id: 'race-1', name: 'Race', scheduledAt: '2024-01-01T10:00:00Z', track: 'Track' }],
|
|
topLeagues: [{ id: 'league-1', name: 'League', description: 'Description' }],
|
|
teams: [{ id: 'team-1', name: 'Team', tag: 'T' }],
|
|
};
|
|
|
|
const result = HomeViewDataBuilder.build(homeDataDto);
|
|
|
|
expect(result.isAlpha).toBe(homeDataDto.isAlpha);
|
|
expect(result.upcomingRaces).toEqual(homeDataDto.upcomingRaces);
|
|
expect(result.topLeagues).toEqual(homeDataDto.topLeagues);
|
|
expect(result.teams).toEqual(homeDataDto.teams);
|
|
});
|
|
|
|
it('should not modify the input DTO', () => {
|
|
const homeDataDto: HomeDataDTO = {
|
|
isAlpha: true,
|
|
upcomingRaces: [{ id: 'race-1', name: 'Race', scheduledAt: '2024-01-01T10:00:00Z', track: 'Track' }],
|
|
topLeagues: [{ id: 'league-1', name: 'League', description: 'Description' }],
|
|
teams: [{ id: 'team-1', name: 'Team', tag: 'T' }],
|
|
};
|
|
|
|
const originalDto = { ...homeDataDto };
|
|
HomeViewDataBuilder.build(homeDataDto);
|
|
|
|
expect(homeDataDto).toEqual(originalDto);
|
|
});
|
|
});
|
|
|
|
describe('edge cases', () => {
|
|
it('should handle false isAlpha value', () => {
|
|
const homeDataDto: HomeDataDTO = {
|
|
isAlpha: false,
|
|
upcomingRaces: [],
|
|
topLeagues: [],
|
|
teams: [],
|
|
};
|
|
|
|
const result = HomeViewDataBuilder.build(homeDataDto);
|
|
|
|
expect(result.isAlpha).toBe(false);
|
|
});
|
|
|
|
it('should handle null/undefined values in arrays', () => {
|
|
const homeDataDto: HomeDataDTO = {
|
|
isAlpha: true,
|
|
upcomingRaces: [{ id: 'race-1', name: 'Race', scheduledAt: '2024-01-01T10:00:00Z', track: 'Track' }],
|
|
topLeagues: [{ id: 'league-1', name: 'League', description: 'Description' }],
|
|
teams: [{ id: 'team-1', name: 'Team', tag: 'T' }],
|
|
};
|
|
|
|
const result = HomeViewDataBuilder.build(homeDataDto);
|
|
|
|
expect(result.upcomingRaces[0].id).toBe('race-1');
|
|
expect(result.topLeagues[0].id).toBe('league-1');
|
|
expect(result.teams[0].id).toBe('team-1');
|
|
});
|
|
});
|
|
});
|