refactor use cases

This commit is contained in:
2026-01-08 15:34:51 +01:00
parent d984ab24a8
commit 52e9a2f6a7
362 changed files with 5192 additions and 8409 deletions

View File

@@ -7,7 +7,7 @@ import {
} from './TransferLeagueOwnershipUseCase';
import type { ILeagueRepository } from '../../domain/repositories/ILeagueRepository';
import type { ILeagueMembershipRepository } from '../../domain/repositories/ILeagueMembershipRepository';
import type { UseCaseOutputPort, Logger } from '@core/shared/application';
import type { Logger } from '@core/shared/application';
import type { ApplicationErrorCode } from '@core/shared/errors/ApplicationErrorCode';
import type { Result } from '@core/shared/application/Result';
@@ -15,7 +15,6 @@ describe('TransferLeagueOwnershipUseCase', () => {
let leagueRepository: ILeagueRepository;
let membershipRepository: ILeagueMembershipRepository;
let logger: Logger & { error: Mock };
let output: UseCaseOutputPort<TransferLeagueOwnershipResult> & { present: Mock };
let useCase: TransferLeagueOwnershipUseCase;
beforeEach(() => {
@@ -36,15 +35,10 @@ describe('TransferLeagueOwnershipUseCase', () => {
error: vi.fn(),
} as unknown as Logger & { error: Mock };
output = {
present: vi.fn(),
} as unknown as UseCaseOutputPort<TransferLeagueOwnershipResult> & { present: Mock };
useCase = new TransferLeagueOwnershipUseCase(
leagueRepository,
membershipRepository,
logger,
output,
);
});
@@ -82,12 +76,17 @@ describe('TransferLeagueOwnershipUseCase', () => {
};
const result: Result<
void,
TransferLeagueOwnershipResult,
ApplicationErrorCode<TransferLeagueOwnershipErrorCode, { message: string }>
> = await useCase.execute(input);
expect(result.isOk()).toBe(true);
expect(result.unwrap()).toBeUndefined();
const successResult = result.unwrap();
expect(successResult).toEqual({
leagueId: 'league-1',
previousOwnerId: 'owner-1',
newOwnerId: 'owner-2',
});
expect(leagueRepository.findById).toHaveBeenCalledWith('league-1');
expect(membershipRepository.getMembership).toHaveBeenCalledWith('league-1', 'owner-2');
@@ -104,16 +103,6 @@ describe('TransferLeagueOwnershipUseCase', () => {
expect(mockLeague.update).toHaveBeenCalledWith({ ownerId: 'owner-2' });
expect(leagueRepository.update).toHaveBeenCalledWith(expect.anything());
expect(output.present).toHaveBeenCalledTimes(1);
const presentMock = output.present as Mock;
const presented = presentMock.mock.calls[0]![0] as TransferLeagueOwnershipResult;
expect(presented).toEqual({
leagueId: 'league-1',
previousOwnerId: 'owner-1',
newOwnerId: 'owner-2',
});
});
it('returns LEAGUE_NOT_FOUND when league does not exist', async () => {
@@ -126,7 +115,7 @@ describe('TransferLeagueOwnershipUseCase', () => {
};
const result: Result<
void,
TransferLeagueOwnershipResult,
ApplicationErrorCode<TransferLeagueOwnershipErrorCode, { message: string }>
> = await useCase.execute(input);
@@ -138,7 +127,6 @@ describe('TransferLeagueOwnershipUseCase', () => {
expect(error.code).toBe('LEAGUE_NOT_FOUND');
expect(error.details?.message).toContain('non-existent');
expect(output.present).not.toHaveBeenCalled();
});
it('returns NOT_LEAGUE_OWNER when current owner does not match', async () => {
@@ -157,7 +145,7 @@ describe('TransferLeagueOwnershipUseCase', () => {
};
const result: Result<
void,
TransferLeagueOwnershipResult,
ApplicationErrorCode<TransferLeagueOwnershipErrorCode, { message: string }>
> = await useCase.execute(input);
@@ -168,7 +156,6 @@ describe('TransferLeagueOwnershipUseCase', () => {
>;
expect(error.code).toBe('NOT_LEAGUE_OWNER');
expect(output.present).not.toHaveBeenCalled();
});
it('returns NEW_OWNER_NOT_MEMBER when new owner is not an active member', async () => {
@@ -189,7 +176,7 @@ describe('TransferLeagueOwnershipUseCase', () => {
};
const result: Result<
void,
TransferLeagueOwnershipResult,
ApplicationErrorCode<TransferLeagueOwnershipErrorCode, { message: string }>
> = await useCase.execute(input);
@@ -200,7 +187,6 @@ describe('TransferLeagueOwnershipUseCase', () => {
>;
expect(error.code).toBe('NEW_OWNER_NOT_MEMBER');
expect(output.present).not.toHaveBeenCalled();
});
it('wraps repository errors in REPOSITORY_ERROR and logs the error', async () => {
@@ -233,7 +219,7 @@ describe('TransferLeagueOwnershipUseCase', () => {
};
const result: Result<
void,
TransferLeagueOwnershipResult,
ApplicationErrorCode<TransferLeagueOwnershipErrorCode, { message: string }>
> = await useCase.execute(input);
@@ -246,7 +232,6 @@ describe('TransferLeagueOwnershipUseCase', () => {
expect(error.code).toBe('REPOSITORY_ERROR');
expect(error.details?.message).toBe('update failed');
expect(output.present).not.toHaveBeenCalled();
expect(logger.error).toHaveBeenCalled();
const errorMock = logger.error as Mock;
@@ -255,4 +240,4 @@ describe('TransferLeagueOwnershipUseCase', () => {
const loggedMessage = calls[0]?.[0] as string;
expect(loggedMessage).toContain('update failed');
});
});
});