refactor use cases
This commit is contained in:
@@ -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');
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user