code quality
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
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
This commit is contained in:
@@ -1,3 +1,18 @@
|
||||
export interface ScoringSystem {
|
||||
// Define scoring system properties based on your domain
|
||||
// This is a placeholder - adjust based on actual scoring system structure
|
||||
pointsPerPosition?: Record<number, number>;
|
||||
bonusPoints?: {
|
||||
polePosition?: number;
|
||||
fastestLap?: number;
|
||||
cleanRace?: number;
|
||||
};
|
||||
penalties?: {
|
||||
timePenalty?: number;
|
||||
pointsDeduction?: number;
|
||||
};
|
||||
}
|
||||
|
||||
export interface LeagueCreateCommand {
|
||||
name: string;
|
||||
description?: string;
|
||||
@@ -16,7 +31,7 @@ export interface LeagueCreateCommand {
|
||||
tracks?: string[];
|
||||
|
||||
// Scoring
|
||||
scoringSystem?: any;
|
||||
scoringSystem?: ScoringSystem;
|
||||
bonusPointsEnabled: boolean;
|
||||
penaltiesEnabled: boolean;
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import { ScoringSystem } from './LeagueCreateCommand';
|
||||
|
||||
export interface LeagueCreatedEvent {
|
||||
type: 'LeagueCreatedEvent';
|
||||
leagueId: string;
|
||||
@@ -5,10 +7,33 @@ export interface LeagueCreatedEvent {
|
||||
timestamp: Date;
|
||||
}
|
||||
|
||||
export interface LeagueUpdates {
|
||||
name?: string;
|
||||
description?: string;
|
||||
visibility?: 'public' | 'private';
|
||||
maxDrivers?: number;
|
||||
approvalRequired?: boolean;
|
||||
lateJoinAllowed?: boolean;
|
||||
raceFrequency?: string;
|
||||
raceDay?: string;
|
||||
raceTime?: string;
|
||||
tracks?: string[];
|
||||
scoringSystem?: ScoringSystem;
|
||||
bonusPointsEnabled?: boolean;
|
||||
penaltiesEnabled?: boolean;
|
||||
protestsEnabled?: boolean;
|
||||
appealsEnabled?: boolean;
|
||||
stewardTeam?: string[];
|
||||
gameType?: string;
|
||||
skillLevel?: string;
|
||||
category?: string;
|
||||
tags?: string[];
|
||||
}
|
||||
|
||||
export interface LeagueUpdatedEvent {
|
||||
type: 'LeagueUpdatedEvent';
|
||||
leagueId: string;
|
||||
updates: Partial<any>;
|
||||
updates: Partial<LeagueUpdates>;
|
||||
timestamp: Date;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import { ScoringSystem } from './LeagueCreateCommand';
|
||||
|
||||
export interface LeagueData {
|
||||
id: string;
|
||||
name: string;
|
||||
@@ -20,7 +22,7 @@ export interface LeagueData {
|
||||
tracks: string[] | null;
|
||||
|
||||
// Scoring
|
||||
scoringSystem: any | null;
|
||||
scoringSystem: ScoringSystem | null;
|
||||
bonusPointsEnabled: boolean;
|
||||
penaltiesEnabled: boolean;
|
||||
|
||||
|
||||
@@ -1,28 +1,63 @@
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
||||
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: any;
|
||||
let mockEventPublisher: any;
|
||||
let mockLeagueRepository: LeagueRepository;
|
||||
let mockEventPublisher: LeagueEventPublisher;
|
||||
let useCase: CreateLeagueUseCase;
|
||||
|
||||
beforeEach(() => {
|
||||
mockLeagueRepository = {
|
||||
create: vi.fn().mockImplementation((data) => Promise.resolve(data)),
|
||||
updateStats: vi.fn().mockResolvedValue(undefined),
|
||||
updateFinancials: vi.fn().mockResolvedValue(undefined),
|
||||
updateStewardingMetrics: vi.fn().mockResolvedValue(undefined),
|
||||
updatePerformanceMetrics: vi.fn().mockResolvedValue(undefined),
|
||||
updateRatingMetrics: vi.fn().mockResolvedValue(undefined),
|
||||
updateTrendMetrics: vi.fn().mockResolvedValue(undefined),
|
||||
updateSuccessRateMetrics: vi.fn().mockResolvedValue(undefined),
|
||||
updateResolutionTimeMetrics: vi.fn().mockResolvedValue(undefined),
|
||||
updateComplexSuccessRateMetrics: vi.fn().mockResolvedValue(undefined),
|
||||
updateComplexResolutionTimeMetrics: vi.fn().mockResolvedValue(undefined),
|
||||
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),
|
||||
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);
|
||||
});
|
||||
@@ -51,12 +86,12 @@ describe('CreateLeagueUseCase', () => {
|
||||
});
|
||||
|
||||
it('should throw error if name is missing', async () => {
|
||||
const command: any = { ownerId: 'owner-1' };
|
||||
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: any = { name: 'League' };
|
||||
const command = { name: 'League' } as unknown as LeagueCreateCommand;
|
||||
await expect(useCase.execute(command)).rejects.toThrow('Owner ID is required');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,19 +1,94 @@
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
||||
import { describe, it, expect, vi, beforeEach, Mock } from 'vitest';
|
||||
import { DemoteAdminUseCase } from './DemoteAdminUseCase';
|
||||
import { LeagueRepository } from '../ports/LeagueRepository';
|
||||
import { DriverRepository } from '../../racing/domain/repositories/DriverRepository';
|
||||
import { LeagueEventPublisher } from '../ports/LeagueEventPublisher';
|
||||
|
||||
describe('DemoteAdminUseCase', () => {
|
||||
let mockLeagueRepository: any;
|
||||
let mockDriverRepository: any;
|
||||
let mockEventPublisher: any;
|
||||
let mockLeagueRepository: LeagueRepository;
|
||||
let mockDriverRepository: DriverRepository;
|
||||
let mockEventPublisher: LeagueEventPublisher;
|
||||
let useCase: DemoteAdminUseCase;
|
||||
|
||||
beforeEach(() => {
|
||||
mockLeagueRepository = {
|
||||
updateLeagueMember: vi.fn().mockResolvedValue(undefined),
|
||||
updateLeagueMember: vi.fn().mockResolvedValue(undefined) as unknown as Mock,
|
||||
create: vi.fn() 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() as unknown as Mock,
|
||||
getFinancials: vi.fn() as unknown as Mock,
|
||||
updateFinancials: vi.fn() as unknown as Mock,
|
||||
getStewardingMetrics: vi.fn() as unknown as Mock,
|
||||
updateStewardingMetrics: vi.fn() as unknown as Mock,
|
||||
getPerformanceMetrics: vi.fn() as unknown as Mock,
|
||||
updatePerformanceMetrics: vi.fn() as unknown as Mock,
|
||||
getRatingMetrics: vi.fn() as unknown as Mock,
|
||||
updateRatingMetrics: vi.fn() as unknown as Mock,
|
||||
getTrendMetrics: vi.fn() as unknown as Mock,
|
||||
updateTrendMetrics: vi.fn() as unknown as Mock,
|
||||
getSuccessRateMetrics: vi.fn() as unknown as Mock,
|
||||
updateSuccessRateMetrics: vi.fn() as unknown as Mock,
|
||||
getResolutionTimeMetrics: vi.fn() as unknown as Mock,
|
||||
updateResolutionTimeMetrics: vi.fn() as unknown as Mock,
|
||||
getComplexSuccessRateMetrics: vi.fn() as unknown as Mock,
|
||||
updateComplexSuccessRateMetrics: vi.fn() as unknown as Mock,
|
||||
getComplexResolutionTimeMetrics: vi.fn() as unknown as Mock,
|
||||
updateComplexResolutionTimeMetrics: vi.fn() 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,
|
||||
removeLeagueMember: vi.fn() as unknown as Mock,
|
||||
addPendingRequests: vi.fn() as unknown as Mock,
|
||||
removePendingRequest: vi.fn() as unknown as Mock,
|
||||
};
|
||||
mockDriverRepository = {};
|
||||
mockEventPublisher = {};
|
||||
useCase = new DemoteAdminUseCase(mockLeagueRepository, mockDriverRepository, mockEventPublisher as any);
|
||||
mockDriverRepository = {
|
||||
findById: vi.fn() as unknown as Mock,
|
||||
findByName: vi.fn() as unknown as Mock,
|
||||
findByEmail: 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() as unknown as Mock,
|
||||
getPerformanceMetrics: vi.fn() as unknown as Mock,
|
||||
updatePerformanceMetrics: vi.fn() as unknown as Mock,
|
||||
getRatingMetrics: vi.fn() as unknown as Mock,
|
||||
updateRatingMetrics: vi.fn() as unknown as Mock,
|
||||
getTrendMetrics: vi.fn() as unknown as Mock,
|
||||
updateTrendMetrics: vi.fn() as unknown as Mock,
|
||||
getSuccessRateMetrics: vi.fn() as unknown as Mock,
|
||||
updateSuccessRateMetrics: vi.fn() as unknown as Mock,
|
||||
getResolutionTimeMetrics: vi.fn() as unknown as Mock,
|
||||
updateResolutionTimeMetrics: vi.fn() as unknown as Mock,
|
||||
getComplexSuccessRateMetrics: vi.fn() as unknown as Mock,
|
||||
updateComplexSuccessRateMetrics: vi.fn() as unknown as Mock,
|
||||
getComplexResolutionTimeMetrics: vi.fn() as unknown as Mock,
|
||||
updateComplexResolutionTimeMetrics: vi.fn() as unknown as Mock,
|
||||
getDriverMemberships: vi.fn() as unknown as Mock,
|
||||
addDriverMembership: vi.fn() as unknown as Mock,
|
||||
updateDriverMembership: vi.fn() as unknown as Mock,
|
||||
removeDriverMembership: vi.fn() as unknown as Mock,
|
||||
};
|
||||
mockEventPublisher = {
|
||||
emitLeagueCreated: vi.fn() 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() as unknown as Mock,
|
||||
getLeagueUpdatedEventCount: vi.fn() as unknown as Mock,
|
||||
getLeagueDeletedEventCount: vi.fn() as unknown as Mock,
|
||||
getLeagueAccessedEventCount: vi.fn() as unknown as Mock,
|
||||
getLeagueRosterAccessedEventCount: vi.fn() as unknown as Mock,
|
||||
clear: vi.fn() as unknown as Mock,
|
||||
};
|
||||
useCase = new DemoteAdminUseCase(mockLeagueRepository, mockDriverRepository, mockEventPublisher);
|
||||
});
|
||||
|
||||
it('should update member role to member', async () => {
|
||||
|
||||
Reference in New Issue
Block a user