Files
gridpilot.gg/tests/integration/leagues/creation/league-create-success.test.ts
Marc Mintel 09632d004d
Some checks failed
CI / lint-typecheck (pull_request) Failing after 12s
CI / tests (pull_request) Has been skipped
CI / contract-tests (pull_request) Has been skipped
CI / e2e-tests (pull_request) Has been skipped
CI / comment-pr (pull_request) Has been skipped
CI / commit-types (pull_request) Has been skipped
code quality
2026-01-26 22:16:33 +01:00

90 lines
3.1 KiB
TypeScript

import { describe, it, expect, beforeEach } from 'vitest';
import { LeaguesTestContext } from '../LeaguesTestContext';
import { LeagueCreateCommand } from '../../../../core/leagues/application/ports/LeagueCreateCommand';
describe('League Creation - Success Path', () => {
let context: LeaguesTestContext;
beforeEach(() => {
context = new LeaguesTestContext();
context.clear();
});
it('should create a league with complete configuration', async () => {
const driverId = 'driver-123';
const command: LeagueCreateCommand = {
name: 'Test League',
description: 'A test league for integration testing',
visibility: 'public',
ownerId: driverId,
maxDrivers: 20,
approvalRequired: true,
lateJoinAllowed: true,
raceFrequency: 'weekly',
raceDay: 'Saturday',
raceTime: '18:00',
tracks: ['Monza', 'Spa', 'Nürburgring'],
bonusPointsEnabled: true,
penaltiesEnabled: true,
protestsEnabled: true,
appealsEnabled: true,
stewardTeam: ['steward-1', 'steward-2'],
gameType: 'iRacing',
skillLevel: 'Intermediate',
category: 'GT3',
tags: ['competitive', 'weekly-races'],
};
const result = await context.createLeagueUseCase.execute(command);
expect(result).toBeDefined();
expect(result.id).toBeDefined();
expect(result.name).toBe('Test League');
expect(result.ownerId).toBe(driverId);
expect(result.status).toBe('active');
expect(result.maxDrivers).toBe(20);
expect(result.tracks).toEqual(['Monza', 'Spa', 'Nürburgring']);
const savedLeague = await context.leagueRepository.findById(result.id);
expect(savedLeague).toBeDefined();
expect(savedLeague?.ownerId).toBe(driverId);
expect(context.eventPublisher.getLeagueCreatedEventCount()).toBe(1);
const events = context.eventPublisher.getLeagueCreatedEvents();
expect(events[0]!.leagueId).toBe(result.id);
});
it('should create a league with minimal configuration', async () => {
const driverId = 'driver-123';
const command: LeagueCreateCommand = {
name: 'Minimal League',
visibility: 'public',
ownerId: driverId,
approvalRequired: false,
lateJoinAllowed: false,
bonusPointsEnabled: false,
penaltiesEnabled: false,
protestsEnabled: false,
appealsEnabled: false,
};
const result = await context.createLeagueUseCase.execute(command);
expect(result).toBeDefined();
expect(result.name).toBe('Minimal League');
expect(result.status).toBe('active');
expect(result.description).toBeNull();
expect(context.eventPublisher.getLeagueCreatedEventCount()).toBe(1);
});
it('should create a league with public visibility', async () => {
const result = await context.createLeague({ name: 'Public League', visibility: 'public' });
expect(result.visibility).toBe('public');
});
it('should create a league with private visibility', async () => {
const result = await context.createLeague({ name: 'Private League', visibility: 'private' });
expect(result.visibility).toBe('private');
});
});