Files
gridpilot.gg/core/leagues/application/use-cases/CreateLeagueUseCase.test.ts
Marc Mintel afef777961
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 02:27:37 +01:00

98 lines
4.7 KiB
TypeScript

import { describe, it, expect, vi, beforeEach, Mock } from 'vitest';
import { CreateLeagueUseCase } from './CreateLeagueUseCase';
import { LeagueCreateCommand } from '../ports/LeagueCreateCommand';
import { LeagueRepository } from '../ports/LeagueRepository';
import { LeagueEventPublisher } from '../ports/LeagueEventPublisher';
describe('CreateLeagueUseCase', () => {
let mockLeagueRepository: LeagueRepository;
let mockEventPublisher: LeagueEventPublisher;
let useCase: CreateLeagueUseCase;
beforeEach(() => {
mockLeagueRepository = {
create: vi.fn().mockImplementation((data) => Promise.resolve(data)) as unknown as Mock,
findById: vi.fn() as unknown as Mock,
findByName: vi.fn() as unknown as Mock,
findByOwner: vi.fn() as unknown as Mock,
search: vi.fn() as unknown as Mock,
update: vi.fn() as unknown as Mock,
delete: vi.fn() as unknown as Mock,
getStats: vi.fn() as unknown as Mock,
updateStats: vi.fn().mockResolvedValue(undefined) as unknown as Mock,
getFinancials: vi.fn() as unknown as Mock,
updateFinancials: vi.fn().mockResolvedValue(undefined) as unknown as Mock,
getStewardingMetrics: vi.fn() as unknown as Mock,
updateStewardingMetrics: vi.fn().mockResolvedValue(undefined) as unknown as Mock,
getPerformanceMetrics: vi.fn() as unknown as Mock,
updatePerformanceMetrics: vi.fn().mockResolvedValue(undefined) as unknown as Mock,
getRatingMetrics: vi.fn() as unknown as Mock,
updateRatingMetrics: vi.fn().mockResolvedValue(undefined) as unknown as Mock,
getTrendMetrics: vi.fn() as unknown as Mock,
updateTrendMetrics: vi.fn().mockResolvedValue(undefined) as unknown as Mock,
getSuccessRateMetrics: vi.fn() as unknown as Mock,
updateSuccessRateMetrics: vi.fn().mockResolvedValue(undefined) as unknown as Mock,
getResolutionTimeMetrics: vi.fn() as unknown as Mock,
updateResolutionTimeMetrics: vi.fn().mockResolvedValue(undefined) as unknown as Mock,
getComplexSuccessRateMetrics: vi.fn() as unknown as Mock,
updateComplexSuccessRateMetrics: vi.fn().mockResolvedValue(undefined) as unknown as Mock,
getComplexResolutionTimeMetrics: vi.fn() as unknown as Mock,
updateComplexResolutionTimeMetrics: vi.fn().mockResolvedValue(undefined) as unknown as Mock,
getLeagueMembers: vi.fn() as unknown as Mock,
getPendingRequests: vi.fn() as unknown as Mock,
addLeagueMembers: vi.fn() as unknown as Mock,
updateLeagueMember: vi.fn() as unknown as Mock,
removeLeagueMember: vi.fn() as unknown as Mock,
addPendingRequests: vi.fn() as unknown as Mock,
removePendingRequest: vi.fn() as unknown as Mock,
};
mockEventPublisher = {
emitLeagueCreated: vi.fn().mockResolvedValue(undefined) as unknown as Mock,
emitLeagueUpdated: vi.fn() as unknown as Mock,
emitLeagueDeleted: vi.fn() as unknown as Mock,
emitLeagueAccessed: vi.fn() as unknown as Mock,
emitLeagueRosterAccessed: vi.fn() as unknown as Mock,
getLeagueCreatedEventCount: vi.fn().mockReturnValue(0) as unknown as Mock,
getLeagueUpdatedEventCount: vi.fn().mockReturnValue(0) as unknown as Mock,
getLeagueDeletedEventCount: vi.fn().mockReturnValue(0) as unknown as Mock,
getLeagueAccessedEventCount: vi.fn().mockReturnValue(0) as unknown as Mock,
getLeagueRosterAccessedEventCount: vi.fn().mockReturnValue(0) as unknown as Mock,
clear: vi.fn() as unknown as Mock,
};
useCase = new CreateLeagueUseCase(mockLeagueRepository, mockEventPublisher);
});
it('should create a league and initialize all metrics', async () => {
const command: LeagueCreateCommand = {
name: 'New League',
ownerId: 'owner-1',
visibility: 'public',
approvalRequired: false,
lateJoinAllowed: true,
bonusPointsEnabled: true,
penaltiesEnabled: true,
protestsEnabled: true,
appealsEnabled: true,
};
const result = await useCase.execute(command);
expect(result.name).toBe('New League');
expect(result.ownerId).toBe('owner-1');
expect(mockLeagueRepository.create).toHaveBeenCalled();
expect(mockLeagueRepository.updateStats).toHaveBeenCalled();
expect(mockLeagueRepository.updateFinancials).toHaveBeenCalled();
expect(mockEventPublisher.emitLeagueCreated).toHaveBeenCalled();
});
it('should throw error if name is missing', async () => {
const command = { ownerId: 'owner-1' } as unknown as LeagueCreateCommand;
await expect(useCase.execute(command)).rejects.toThrow('League name is required');
});
it('should throw error if ownerId is missing', async () => {
const command = { name: 'League' } as unknown as LeagueCreateCommand;
await expect(useCase.execute(command)).rejects.toThrow('Owner ID is required');
});
});