code quality

This commit is contained in:
2026-01-26 11:02:19 +01:00
parent afef777961
commit f877f821ef
14 changed files with 232 additions and 87 deletions

View File

@@ -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 = () => ({

View File

@@ -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,

View File

@@ -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');
}); });
}); });

View File

@@ -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');
}); });
}); });

View File

@@ -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);

View File

@@ -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');
}); });
}); });

View File

@@ -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);

View File

@@ -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');
}); });
}); });

View File

@@ -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 [];
}); });

View File

@@ -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();

View File

@@ -14,7 +14,7 @@ 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': [
@@ -42,7 +42,7 @@ describe('ChampionshipAggregator', () => {
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);

View File

@@ -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,
}); });
}); });

View File

@@ -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,
}); });
}); });

View File

@@ -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');
}); });
}); });