fix issues in core

This commit is contained in:
2025-12-23 15:38:50 +01:00
parent df5c20c5cc
commit 120d3bb1a1
125 changed files with 1005 additions and 793 deletions

View File

@@ -1,10 +1,11 @@
import { describe, it, expect, beforeEach, vi, Mock } from 'vitest';
import { ApplyPenaltyUseCase } from './ApplyPenaltyUseCase';
import { ApplyPenaltyUseCase, type ApplyPenaltyResult } from './ApplyPenaltyUseCase';
import type { IPenaltyRepository } from '../../domain/repositories/IPenaltyRepository';
import type { IProtestRepository } from '../../domain/repositories/IProtestRepository';
import type { IRaceRepository } from '../../domain/repositories/IRaceRepository';
import type { ILeagueMembershipRepository } from '../../domain/repositories/ILeagueMembershipRepository';
import type { Logger } from '@core/shared/application';
import type { UseCaseOutputPort } from '@core/shared/application/UseCaseOutputPort';
describe('ApplyPenaltyUseCase', () => {
let mockPenaltyRepo: {
@@ -48,7 +49,7 @@ describe('ApplyPenaltyUseCase', () => {
});
it('should return error when race does not exist', async () => {
const output = {
const output: UseCaseOutputPort<ApplyPenaltyResult> & { present: Mock } = {
present: vi.fn(),
};
@@ -58,7 +59,7 @@ describe('ApplyPenaltyUseCase', () => {
mockRaceRepo as unknown as IRaceRepository,
mockLeagueMembershipRepo as unknown as ILeagueMembershipRepository,
mockLogger as unknown as Logger,
output as any,
output,
);
mockRaceRepo.findById.mockResolvedValue(null);
@@ -77,7 +78,7 @@ describe('ApplyPenaltyUseCase', () => {
});
it('should return error when steward does not have authority', async () => {
const output = {
const output: UseCaseOutputPort<ApplyPenaltyResult> & { present: Mock } = {
present: vi.fn(),
};
@@ -87,13 +88,18 @@ describe('ApplyPenaltyUseCase', () => {
mockRaceRepo as unknown as IRaceRepository,
mockLeagueMembershipRepo as unknown as ILeagueMembershipRepository,
mockLogger as unknown as Logger,
output as any,
output,
);
mockRaceRepo.findById.mockResolvedValue({ id: 'race1', leagueId: 'league1' });
mockLeagueMembershipRepo.getLeagueMembers.mockResolvedValue([
{ driverId: 'steward1', role: 'member', status: 'active' },
]);
const membership = {
driverId: { toString: () => 'steward1' },
role: { toString: () => 'member' },
status: { toString: () => 'active' },
};
mockLeagueMembershipRepo.getLeagueMembers.mockResolvedValue([membership]);
const result = await useCase.execute({
raceId: 'race1',
@@ -109,7 +115,7 @@ describe('ApplyPenaltyUseCase', () => {
});
it('should return error when protest does not exist', async () => {
const output = {
const output: UseCaseOutputPort<ApplyPenaltyResult> & { present: Mock } = {
present: vi.fn(),
};
@@ -119,13 +125,18 @@ describe('ApplyPenaltyUseCase', () => {
mockRaceRepo as unknown as IRaceRepository,
mockLeagueMembershipRepo as unknown as ILeagueMembershipRepository,
mockLogger as unknown as Logger,
output as any,
output,
);
mockRaceRepo.findById.mockResolvedValue({ id: 'race1', leagueId: 'league1' });
mockLeagueMembershipRepo.getLeagueMembers.mockResolvedValue([
{ driverId: 'steward1', role: 'owner', status: 'active' },
]);
const membership = {
driverId: { toString: () => 'steward1' },
role: { toString: () => 'owner' },
status: { toString: () => 'active' },
};
mockLeagueMembershipRepo.getLeagueMembers.mockResolvedValue([membership]);
mockProtestRepo.findById.mockResolvedValue(null);
const result = await useCase.execute({
@@ -143,7 +154,7 @@ describe('ApplyPenaltyUseCase', () => {
});
it('should return error when protest is not upheld', async () => {
const output = {
const output: UseCaseOutputPort<ApplyPenaltyResult> & { present: Mock } = {
present: vi.fn(),
};
@@ -153,13 +164,18 @@ describe('ApplyPenaltyUseCase', () => {
mockRaceRepo as unknown as IRaceRepository,
mockLeagueMembershipRepo as unknown as ILeagueMembershipRepository,
mockLogger as unknown as Logger,
output as any,
output,
);
mockRaceRepo.findById.mockResolvedValue({ id: 'race1', leagueId: 'league1' });
mockLeagueMembershipRepo.getLeagueMembers.mockResolvedValue([
{ driverId: 'steward1', role: 'owner', status: 'active' },
]);
const membership = {
driverId: { toString: () => 'steward1' },
role: { toString: () => 'owner' },
status: { toString: () => 'active' },
};
mockLeagueMembershipRepo.getLeagueMembers.mockResolvedValue([membership]);
mockProtestRepo.findById.mockResolvedValue({ id: 'protest1', status: 'pending', raceId: 'race1' });
const result = await useCase.execute({
@@ -177,7 +193,7 @@ describe('ApplyPenaltyUseCase', () => {
});
it('should return error when protest is not for this race', async () => {
const output = {
const output: UseCaseOutputPort<ApplyPenaltyResult> & { present: Mock } = {
present: vi.fn(),
};
@@ -187,13 +203,18 @@ describe('ApplyPenaltyUseCase', () => {
mockRaceRepo as unknown as IRaceRepository,
mockLeagueMembershipRepo as unknown as ILeagueMembershipRepository,
mockLogger as unknown as Logger,
output as any,
output,
);
mockRaceRepo.findById.mockResolvedValue({ id: 'race1', leagueId: 'league1' });
mockLeagueMembershipRepo.getLeagueMembers.mockResolvedValue([
{ driverId: 'steward1', role: 'owner', status: 'active' },
]);
const membership = {
driverId: { toString: () => 'steward1' },
role: { toString: () => 'owner' },
status: { toString: () => 'active' },
};
mockLeagueMembershipRepo.getLeagueMembers.mockResolvedValue([membership]);
mockProtestRepo.findById.mockResolvedValue({ id: 'protest1', status: 'upheld', raceId: 'race2' });
const result = await useCase.execute({
@@ -211,7 +232,7 @@ describe('ApplyPenaltyUseCase', () => {
});
it('should create penalty and return result on success', async () => {
const output = {
const output: UseCaseOutputPort<ApplyPenaltyResult> & { present: Mock } = {
present: vi.fn(),
};
@@ -221,13 +242,18 @@ describe('ApplyPenaltyUseCase', () => {
mockRaceRepo as unknown as IRaceRepository,
mockLeagueMembershipRepo as unknown as ILeagueMembershipRepository,
mockLogger as unknown as Logger,
output as any,
output,
);
mockRaceRepo.findById.mockResolvedValue({ id: 'race1', leagueId: 'league1' });
mockLeagueMembershipRepo.getLeagueMembers.mockResolvedValue([
{ driverId: 'steward1', role: 'admin', status: 'active' },
]);
const membership = {
driverId: { toString: () => 'steward1' },
role: { toString: () => 'admin' },
status: { toString: () => 'active' },
};
mockLeagueMembershipRepo.getLeagueMembers.mockResolvedValue([membership]);
mockPenaltyRepo.create.mockResolvedValue(undefined);
const result = await useCase.execute({