code quality
This commit is contained in:
@@ -11,7 +11,7 @@ import { RatingSnapshotCalculator } from '../../domain/services/RatingSnapshotCa
|
|||||||
import { AdminVoteSessionRepository } from '../../domain/repositories/AdminVoteSessionRepository';
|
import { AdminVoteSessionRepository } from '../../domain/repositories/AdminVoteSessionRepository';
|
||||||
import { RatingEventRepository } from '../../domain/repositories/RatingEventRepository';
|
import { RatingEventRepository } from '../../domain/repositories/RatingEventRepository';
|
||||||
import { UserRatingRepository } from '../../domain/repositories/UserRatingRepository';
|
import { UserRatingRepository } from '../../domain/repositories/UserRatingRepository';
|
||||||
import { AdminVoteSession, AdminVoteOutcome } from '../../domain/entities/AdminVoteSession';
|
import { AdminVoteOutcome } from '../../domain/entities/AdminVoteSession';
|
||||||
|
|
||||||
// Mock repositories
|
// Mock repositories
|
||||||
const createMockRepositories = () => ({
|
const createMockRepositories = () => ({
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { describe, it, expect, vi, beforeEach, Mock } from 'vitest';
|
import { describe, it, expect, vi, beforeEach, Mock } from 'vitest';
|
||||||
import { DemoteAdminUseCase } from './DemoteAdminUseCase';
|
import { DemoteAdminUseCase } from './DemoteAdminUseCase';
|
||||||
import { LeagueRepository } from '../ports/LeagueRepository';
|
import { LeagueRepository } from '../ports/LeagueRepository';
|
||||||
import { DriverRepository } from '../../racing/domain/repositories/DriverRepository';
|
import { DriverRepository } from '../../../racing/domain/repositories/DriverRepository';
|
||||||
import { LeagueEventPublisher } from '../ports/LeagueEventPublisher';
|
import { LeagueEventPublisher } from '../ports/LeagueEventPublisher';
|
||||||
|
|
||||||
describe('DemoteAdminUseCase', () => {
|
describe('DemoteAdminUseCase', () => {
|
||||||
@@ -49,31 +49,13 @@ describe('DemoteAdminUseCase', () => {
|
|||||||
};
|
};
|
||||||
mockDriverRepository = {
|
mockDriverRepository = {
|
||||||
findById: vi.fn() as unknown as Mock,
|
findById: vi.fn() as unknown as Mock,
|
||||||
findByName: vi.fn() as unknown as Mock,
|
findByIRacingId: vi.fn() as unknown as Mock,
|
||||||
findByEmail: vi.fn() as unknown as Mock,
|
findAll: vi.fn() as unknown as Mock,
|
||||||
search: vi.fn() as unknown as Mock,
|
create: vi.fn() as unknown as Mock,
|
||||||
update: vi.fn() as unknown as Mock,
|
update: vi.fn() as unknown as Mock,
|
||||||
delete: vi.fn() as unknown as Mock,
|
delete: vi.fn() as unknown as Mock,
|
||||||
getStats: vi.fn() as unknown as Mock,
|
exists: vi.fn() as unknown as Mock,
|
||||||
updateStats: vi.fn() as unknown as Mock,
|
existsByIRacingId: 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 = {
|
mockEventPublisher = {
|
||||||
emitLeagueCreated: vi.fn() as unknown as Mock,
|
emitLeagueCreated: vi.fn() as unknown as Mock,
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
import { describe, it, expect, vi, beforeEach, Mock } from 'vitest';
|
||||||
import { GetLeagueRosterUseCase } from './GetLeagueRosterUseCase';
|
import { GetLeagueRosterUseCase } from './GetLeagueRosterUseCase';
|
||||||
|
import { LeagueRepository } from '../ports/LeagueRepository';
|
||||||
|
import { LeagueEventPublisher } from '../ports/LeagueEventPublisher';
|
||||||
|
|
||||||
describe('GetLeagueRosterUseCase', () => {
|
describe('GetLeagueRosterUseCase', () => {
|
||||||
let mockLeagueRepository: any;
|
let mockLeagueRepository: LeagueRepository;
|
||||||
let mockEventPublisher: any;
|
let mockEventPublisher: LeagueEventPublisher;
|
||||||
let useCase: GetLeagueRosterUseCase;
|
let useCase: GetLeagueRosterUseCase;
|
||||||
|
|
||||||
const mockLeague = { id: 'league-1' };
|
const mockLeague = { id: 'league-1' };
|
||||||
@@ -18,12 +20,53 @@ describe('GetLeagueRosterUseCase', () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
mockLeagueRepository = {
|
mockLeagueRepository = {
|
||||||
findById: vi.fn().mockResolvedValue(mockLeague),
|
create: vi.fn() as unknown as Mock,
|
||||||
getLeagueMembers: vi.fn().mockResolvedValue(mockMembers),
|
findById: vi.fn().mockResolvedValue(mockLeague) as unknown as Mock,
|
||||||
getPendingRequests: vi.fn().mockResolvedValue(mockRequests),
|
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().mockResolvedValue(mockMembers) as unknown as Mock,
|
||||||
|
getPendingRequests: vi.fn().mockResolvedValue(mockRequests) 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 = {
|
mockEventPublisher = {
|
||||||
emitLeagueRosterAccessed: vi.fn().mockResolvedValue(undefined),
|
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().mockResolvedValue(undefined) 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 GetLeagueRosterUseCase(mockLeagueRepository, mockEventPublisher);
|
useCase = new GetLeagueRosterUseCase(mockLeagueRepository, mockEventPublisher);
|
||||||
});
|
});
|
||||||
@@ -39,7 +82,7 @@ describe('GetLeagueRosterUseCase', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should throw error if league not found', async () => {
|
it('should throw error if league not found', async () => {
|
||||||
mockLeagueRepository.findById.mockResolvedValue(null);
|
(mockLeagueRepository.findById as Mock).mockResolvedValue(null);
|
||||||
await expect(useCase.execute({ leagueId: 'invalid' })).rejects.toThrow('League with id invalid not found');
|
await expect(useCase.execute({ leagueId: 'invalid' })).rejects.toThrow('League with id invalid not found');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
import { describe, it, expect, vi, beforeEach, Mock } from 'vitest';
|
||||||
import { GetLeagueUseCase, GetLeagueQuery } from './GetLeagueUseCase';
|
import { GetLeagueUseCase, GetLeagueQuery } from './GetLeagueUseCase';
|
||||||
|
import { LeagueRepository } from '../ports/LeagueRepository';
|
||||||
|
import { LeagueEventPublisher } from '../ports/LeagueEventPublisher';
|
||||||
|
|
||||||
describe('GetLeagueUseCase', () => {
|
describe('GetLeagueUseCase', () => {
|
||||||
let mockLeagueRepository: any;
|
let mockLeagueRepository: LeagueRepository;
|
||||||
let mockEventPublisher: any;
|
let mockEventPublisher: LeagueEventPublisher;
|
||||||
let useCase: GetLeagueUseCase;
|
let useCase: GetLeagueUseCase;
|
||||||
|
|
||||||
const mockLeague = {
|
const mockLeague = {
|
||||||
@@ -14,10 +16,53 @@ describe('GetLeagueUseCase', () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
mockLeagueRepository = {
|
mockLeagueRepository = {
|
||||||
findById: vi.fn().mockResolvedValue(mockLeague),
|
create: vi.fn() as unknown as Mock,
|
||||||
|
findById: vi.fn().mockResolvedValue(mockLeague) 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,
|
||||||
|
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 = {
|
mockEventPublisher = {
|
||||||
emitLeagueAccessed: vi.fn().mockResolvedValue(undefined),
|
emitLeagueCreated: vi.fn() as unknown as Mock,
|
||||||
|
emitLeagueUpdated: vi.fn() as unknown as Mock,
|
||||||
|
emitLeagueDeleted: vi.fn() as unknown as Mock,
|
||||||
|
emitLeagueAccessed: vi.fn().mockResolvedValue(undefined) 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 GetLeagueUseCase(mockLeagueRepository, mockEventPublisher);
|
useCase = new GetLeagueUseCase(mockLeagueRepository, mockEventPublisher);
|
||||||
});
|
});
|
||||||
@@ -39,14 +84,14 @@ describe('GetLeagueUseCase', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should throw error if league not found', async () => {
|
it('should throw error if league not found', async () => {
|
||||||
mockLeagueRepository.findById.mockResolvedValue(null);
|
(mockLeagueRepository.findById as Mock).mockResolvedValue(null);
|
||||||
const query: GetLeagueQuery = { leagueId: 'non-existent' };
|
const query: GetLeagueQuery = { leagueId: 'non-existent' };
|
||||||
|
|
||||||
await expect(useCase.execute(query)).rejects.toThrow('League with id non-existent not found');
|
await expect(useCase.execute(query)).rejects.toThrow('League with id non-existent not found');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should throw error if leagueId is missing', async () => {
|
it('should throw error if leagueId is missing', async () => {
|
||||||
const query: any = {};
|
const query = {} as unknown as GetLeagueQuery;
|
||||||
await expect(useCase.execute(query)).rejects.toThrow('League ID is required');
|
await expect(useCase.execute(query)).rejects.toThrow('League ID is required');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,19 +1,60 @@
|
|||||||
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
import { describe, it, expect, vi, beforeEach, Mock } from 'vitest';
|
||||||
import { JoinLeagueUseCase } from './JoinLeagueUseCase';
|
import { JoinLeagueUseCase } from './JoinLeagueUseCase';
|
||||||
import type { JoinLeagueCommand } from '../ports/JoinLeagueCommand';
|
import type { JoinLeagueCommand } from '../ports/JoinLeagueCommand';
|
||||||
|
import { LeagueRepository } from '../ports/LeagueRepository';
|
||||||
|
import { DriverRepository } from '../../../racing/domain/repositories/DriverRepository';
|
||||||
|
import { EventPublisher } from '../../../shared/ports/EventPublisher';
|
||||||
|
|
||||||
const mockLeagueRepository = {
|
const mockLeagueRepository: LeagueRepository = {
|
||||||
findById: vi.fn(),
|
create: vi.fn() as unknown as Mock,
|
||||||
addPendingRequests: vi.fn(),
|
findById: vi.fn() as unknown as Mock,
|
||||||
addLeagueMembers: vi.fn(),
|
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,
|
||||||
|
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,
|
||||||
};
|
};
|
||||||
|
|
||||||
const mockDriverRepository = {
|
const mockDriverRepository: DriverRepository = {
|
||||||
findDriverById: vi.fn(),
|
findById: vi.fn() as unknown as Mock,
|
||||||
|
findByIRacingId: vi.fn() as unknown as Mock,
|
||||||
|
findAll: vi.fn() as unknown as Mock,
|
||||||
|
create: vi.fn() as unknown as Mock,
|
||||||
|
update: vi.fn() as unknown as Mock,
|
||||||
|
delete: vi.fn() as unknown as Mock,
|
||||||
|
exists: vi.fn() as unknown as Mock,
|
||||||
|
existsByIRacingId: vi.fn() as unknown as Mock,
|
||||||
};
|
};
|
||||||
|
|
||||||
const mockEventPublisher = {
|
const mockEventPublisher: EventPublisher = {
|
||||||
publish: vi.fn(),
|
publish: vi.fn() as unknown as Mock,
|
||||||
};
|
};
|
||||||
|
|
||||||
describe('JoinLeagueUseCase', () => {
|
describe('JoinLeagueUseCase', () => {
|
||||||
@@ -24,9 +65,9 @@ describe('JoinLeagueUseCase', () => {
|
|||||||
vi.clearAllMocks();
|
vi.clearAllMocks();
|
||||||
|
|
||||||
useCase = new JoinLeagueUseCase(
|
useCase = new JoinLeagueUseCase(
|
||||||
mockLeagueRepository as any,
|
mockLeagueRepository,
|
||||||
mockDriverRepository as any,
|
mockDriverRepository,
|
||||||
mockEventPublisher as any
|
mockEventPublisher
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -38,7 +79,7 @@ describe('JoinLeagueUseCase', () => {
|
|||||||
driverId: 'driver-456',
|
driverId: 'driver-456',
|
||||||
};
|
};
|
||||||
|
|
||||||
mockLeagueRepository.findById.mockImplementation(() => Promise.resolve(null));
|
(mockLeagueRepository.findById as Mock).mockImplementation(() => Promise.resolve(null));
|
||||||
|
|
||||||
// When & Then
|
// When & Then
|
||||||
await expect(useCase.execute(command)).rejects.toThrow('League not found');
|
await expect(useCase.execute(command)).rejects.toThrow('League not found');
|
||||||
@@ -82,13 +123,13 @@ describe('JoinLeagueUseCase', () => {
|
|||||||
tags: null,
|
tags: null,
|
||||||
};
|
};
|
||||||
|
|
||||||
mockLeagueRepository.findById.mockImplementation(() => Promise.resolve(mockLeague));
|
(mockLeagueRepository.findById as Mock).mockImplementation(() => Promise.resolve(mockLeague));
|
||||||
mockDriverRepository.findDriverById.mockImplementation(() => Promise.resolve(null));
|
(mockDriverRepository.findById as Mock).mockImplementation(() => Promise.resolve(null));
|
||||||
|
|
||||||
// When & Then
|
// When & Then
|
||||||
await expect(useCase.execute(command)).rejects.toThrow('Driver not found');
|
await expect(useCase.execute(command)).rejects.toThrow('Driver not found');
|
||||||
expect(mockLeagueRepository.findById).toHaveBeenCalledWith('league-123');
|
expect(mockLeagueRepository.findById).toHaveBeenCalledWith('league-123');
|
||||||
expect(mockDriverRepository.findDriverById).toHaveBeenCalledWith('driver-456');
|
expect(mockDriverRepository.findById).toHaveBeenCalledWith('driver-456');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -141,8 +182,8 @@ describe('JoinLeagueUseCase', () => {
|
|||||||
const frozenTime = new Date('2024-01-01T00:00:00.000Z');
|
const frozenTime = new Date('2024-01-01T00:00:00.000Z');
|
||||||
vi.setSystemTime(frozenTime);
|
vi.setSystemTime(frozenTime);
|
||||||
|
|
||||||
mockLeagueRepository.findById.mockResolvedValue(mockLeague);
|
(mockLeagueRepository.findById as Mock).mockResolvedValue(mockLeague);
|
||||||
mockDriverRepository.findDriverById.mockResolvedValue(mockDriver);
|
(mockDriverRepository.findById as Mock).mockResolvedValue(mockDriver);
|
||||||
|
|
||||||
// When
|
// When
|
||||||
await useCase.execute(command);
|
await useCase.execute(command);
|
||||||
@@ -213,8 +254,8 @@ describe('JoinLeagueUseCase', () => {
|
|||||||
updatedAt: new Date(),
|
updatedAt: new Date(),
|
||||||
};
|
};
|
||||||
|
|
||||||
mockLeagueRepository.findById.mockResolvedValue(mockLeague);
|
(mockLeagueRepository.findById as Mock).mockResolvedValue(mockLeague);
|
||||||
mockDriverRepository.findDriverById.mockResolvedValue(mockDriver);
|
(mockDriverRepository.findById as Mock).mockResolvedValue(mockDriver);
|
||||||
|
|
||||||
// When
|
// When
|
||||||
await useCase.execute(command);
|
await useCase.execute(command);
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
import { describe, it, expect, vi, beforeEach, Mock } from 'vitest';
|
||||||
import { SearchLeaguesUseCase, SearchLeaguesQuery } from './SearchLeaguesUseCase';
|
import { SearchLeaguesUseCase, SearchLeaguesQuery } from './SearchLeaguesUseCase';
|
||||||
|
import { LeagueRepository } from '../ports/LeagueRepository';
|
||||||
|
|
||||||
describe('SearchLeaguesUseCase', () => {
|
describe('SearchLeaguesUseCase', () => {
|
||||||
let mockLeagueRepository: any;
|
let mockLeagueRepository: LeagueRepository;
|
||||||
let useCase: SearchLeaguesUseCase;
|
let useCase: SearchLeaguesUseCase;
|
||||||
|
|
||||||
const mockLeagues = [
|
const mockLeagues = [
|
||||||
@@ -13,7 +14,40 @@ describe('SearchLeaguesUseCase', () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
mockLeagueRepository = {
|
mockLeagueRepository = {
|
||||||
search: vi.fn().mockResolvedValue([...mockLeagues]),
|
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().mockResolvedValue([...mockLeagues]) 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,
|
||||||
|
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,
|
||||||
};
|
};
|
||||||
useCase = new SearchLeaguesUseCase(mockLeagueRepository);
|
useCase = new SearchLeaguesUseCase(mockLeagueRepository);
|
||||||
});
|
});
|
||||||
@@ -35,7 +69,7 @@ describe('SearchLeaguesUseCase', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should throw error if query is missing', async () => {
|
it('should throw error if query is missing', async () => {
|
||||||
const query: any = { query: '' };
|
const query = { query: '' } as unknown as SearchLeaguesQuery;
|
||||||
await expect(useCase.execute(query)).rejects.toThrow('Search query is required');
|
await expect(useCase.execute(query)).rejects.toThrow('Search query is required');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ describe('GetUploadedMediaUseCase', () => {
|
|||||||
const mockMetadata = { size: 9 };
|
const mockMetadata = { size: 9 };
|
||||||
|
|
||||||
mediaStorage.getBytes.mockResolvedValue(mockBytes);
|
mediaStorage.getBytes.mockResolvedValue(mockBytes);
|
||||||
mediaStorage.getMetadata.mockResolvedValue(mockMetadata as any);
|
mediaStorage.getMetadata.mockResolvedValue(mockMetadata as unknown as { size: number; contentType?: string });
|
||||||
|
|
||||||
const input = { storageKey: 'media-key' };
|
const input = { storageKey: 'media-key' };
|
||||||
const result = await useCase.execute(input);
|
const result = await useCase.execute(input);
|
||||||
|
|||||||
@@ -23,11 +23,11 @@ describe('AvatarId', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('throws error when null', () => {
|
it('throws error when null', () => {
|
||||||
expect(() => AvatarId.create(null as any)).toThrow('Avatar ID cannot be empty');
|
expect(() => AvatarId.create(null as unknown as string)).toThrow('Avatar ID cannot be empty');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('throws error when undefined', () => {
|
it('throws error when undefined', () => {
|
||||||
expect(() => AvatarId.create(undefined as any)).toThrow('Avatar ID cannot be empty');
|
expect(() => AvatarId.create(undefined as unknown as string)).toThrow('Avatar ID cannot be empty');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -33,8 +33,8 @@ describe('GetTeamsLeaderboardUseCase', () => {
|
|||||||
vi.mocked(mockTeamRepository.findAll).mockResolvedValue([mockTeam1, mockTeam2]);
|
vi.mocked(mockTeamRepository.findAll).mockResolvedValue([mockTeam1, mockTeam2]);
|
||||||
|
|
||||||
vi.mocked(mockTeamMembershipRepository.getTeamMembers).mockImplementation(async (teamId) => {
|
vi.mocked(mockTeamMembershipRepository.getTeamMembers).mockImplementation(async (teamId) => {
|
||||||
if (teamId === 'team-1') return [{ driverId: 'driver-1' }, { driverId: 'driver-2' }] as any;
|
if (teamId === 'team-1') return [{ driverId: 'driver-1' }, { driverId: 'driver-2' }] as unknown as Array<{ driverId: string }>;
|
||||||
if (teamId === 'team-2') return [{ driverId: 'driver-3' }] as any;
|
if (teamId === 'team-2') return [{ driverId: 'driver-3' }] as unknown as Array<{ driverId: string }>;
|
||||||
return [];
|
return [];
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ describe('RankingUseCase', () => {
|
|||||||
['driver-1', { rating: 1500, wins: 2, totalRaces: 10, overallRank: 1 }],
|
['driver-1', { rating: 1500, wins: 2, totalRaces: 10, overallRank: 1 }],
|
||||||
['driver-2', { rating: 1200, wins: 0, totalRaces: 5, overallRank: 2 }],
|
['driver-2', { rating: 1200, wins: 0, totalRaces: 5, overallRank: 2 }],
|
||||||
]);
|
]);
|
||||||
vi.mocked(mockDriverStatsRepository.getAllStats).mockResolvedValue(mockStatsMap as any);
|
vi.mocked(mockDriverStatsRepository.getAllStats).mockResolvedValue(mockStatsMap as unknown as Map<string, { rating: number; wins: number; totalRaces: number; overallRank: number }>);
|
||||||
|
|
||||||
const result = await useCase.getAllDriverRankings();
|
const result = await useCase.getAllDriverRankings();
|
||||||
|
|
||||||
|
|||||||
@@ -14,19 +14,19 @@ describe('ChampionshipAggregator', () => {
|
|||||||
const championship = {
|
const championship = {
|
||||||
id: 'champ-1',
|
id: 'champ-1',
|
||||||
dropScorePolicy: { strategy: 'none' },
|
dropScorePolicy: { strategy: 'none' },
|
||||||
} as any;
|
} as unknown as { id: string; dropScorePolicy: { strategy: string } };
|
||||||
|
|
||||||
const eventPointsByEventId = {
|
const eventPointsByEventId = {
|
||||||
'event-1': [
|
'event-1': [
|
||||||
{
|
{
|
||||||
participant: { id: 'p1', type: 'driver' },
|
participant: { id: 'p1', type: 'driver' },
|
||||||
totalPoints: 10,
|
totalPoints: 10,
|
||||||
basePoints: 10,
|
basePoints: 10,
|
||||||
bonusPoints: 0,
|
bonusPoints: 0,
|
||||||
penaltyPoints: 0
|
penaltyPoints: 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
participant: { id: 'p2', type: 'driver' },
|
participant: { id: 'p2', type: 'driver' },
|
||||||
totalPoints: 20,
|
totalPoints: 20,
|
||||||
basePoints: 20,
|
basePoints: 20,
|
||||||
bonusPoints: 0,
|
bonusPoints: 0,
|
||||||
@@ -34,15 +34,15 @@ describe('ChampionshipAggregator', () => {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
'event-2': [
|
'event-2': [
|
||||||
{
|
{
|
||||||
participant: { id: 'p1', type: 'driver' },
|
participant: { id: 'p1', type: 'driver' },
|
||||||
totalPoints: 15,
|
totalPoints: 15,
|
||||||
basePoints: 15,
|
basePoints: 15,
|
||||||
bonusPoints: 0,
|
bonusPoints: 0,
|
||||||
penaltyPoints: 0
|
penaltyPoints: 0
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
} as any;
|
} as unknown as Record<string, Array<{ participant: { id: string; type: string }; totalPoints: number; basePoints: number; bonusPoints: number; penaltyPoints: number }>>;
|
||||||
|
|
||||||
vi.mocked(mockDropScoreApplier.apply).mockImplementation((policy, events) => {
|
vi.mocked(mockDropScoreApplier.apply).mockImplementation((policy, events) => {
|
||||||
const total = events.reduce((sum, e) => sum + e.points, 0);
|
const total = events.reduce((sum, e) => sum + e.points, 0);
|
||||||
|
|||||||
@@ -34,10 +34,10 @@ describe('CalculateTeamContributionUseCase', () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
vi.clearAllMocks();
|
vi.clearAllMocks();
|
||||||
useCase = new CalculateTeamContributionUseCase({
|
useCase = new CalculateTeamContributionUseCase({
|
||||||
ratingRepository: mockRatingRepository as any,
|
ratingRepository: mockRatingRepository as unknown as RatingRepository,
|
||||||
driverRepository: mockDriverRepository as any,
|
driverRepository: mockDriverRepository as unknown as DriverRepository,
|
||||||
raceRepository: mockRaceRepository as any,
|
raceRepository: mockRaceRepository as unknown as RaceRepository,
|
||||||
resultRepository: mockResultRepository as any,
|
resultRepository: mockResultRepository as unknown as ResultRepository,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -23,8 +23,8 @@ describe('GetRatingLeaderboardUseCase', () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
vi.clearAllMocks();
|
vi.clearAllMocks();
|
||||||
useCase = new GetRatingLeaderboardUseCase({
|
useCase = new GetRatingLeaderboardUseCase({
|
||||||
ratingRepository: mockRatingRepository as any,
|
ratingRepository: mockRatingRepository as unknown as RatingRepository,
|
||||||
driverRepository: mockDriverRepository as any,
|
driverRepository: mockDriverRepository as unknown as DriverRepository,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -294,11 +294,11 @@ describe('Result', () => {
|
|||||||
it('should stop chaining on first error', () => {
|
it('should stop chaining on first error', () => {
|
||||||
const result = Result.ok(2)
|
const result = Result.ok(2)
|
||||||
.andThen((x) => Result.ok(x * 3))
|
.andThen((x) => Result.ok(x * 3))
|
||||||
.andThen((x) => Result.err(new Error(`stopped at ${x}`)))
|
.andThen((x) => Result.err<number, Error>(new Error(`stopped at ${x}`)))
|
||||||
.andThen((x) => Result.ok(x + 1)); // This should not execute
|
.andThen((x) => Result.ok(x + 1)); // This should not execute
|
||||||
|
|
||||||
expect(result.isErr()).toBe(true);
|
expect(result.isErr()).toBe(true);
|
||||||
expect(result.unwrapErr().message).toBe('stopped here');
|
expect(result.unwrapErr().message).toBe('stopped at 6');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user