refactor use cases
This commit is contained in:
@@ -6,8 +6,6 @@ import {
|
||||
import { League } from '../../domain/entities/League';
|
||||
import type { ILeagueMembershipRepository } from '../../domain/repositories/ILeagueMembershipRepository';
|
||||
import type { ILeagueRepository } from '../../domain/repositories/ILeagueRepository';
|
||||
import type { UseCaseOutputPort } from '@core/shared/application/UseCaseOutputPort';
|
||||
|
||||
describe('ApproveLeagueJoinRequestUseCase', () => {
|
||||
let mockLeagueMembershipRepo: {
|
||||
getJoinRequests: Mock;
|
||||
@@ -34,14 +32,9 @@ describe('ApproveLeagueJoinRequestUseCase', () => {
|
||||
});
|
||||
|
||||
it('approve removes request and adds member', async () => {
|
||||
const output = {
|
||||
present: vi.fn(),
|
||||
};
|
||||
|
||||
const useCase = new ApproveLeagueJoinRequestUseCase(
|
||||
mockLeagueMembershipRepo as unknown as ILeagueMembershipRepository,
|
||||
mockLeagueRepo as unknown as ILeagueRepository,
|
||||
);
|
||||
const useCase = new ApproveLeagueJoinRequestUseCase(mockLeagueMembershipRepo as unknown as ILeagueMembershipRepository,
|
||||
mockLeagueRepo as unknown as ILeagueRepository);
|
||||
|
||||
const leagueId = 'league-1';
|
||||
const joinRequestId = 'req-1';
|
||||
@@ -63,11 +56,10 @@ describe('ApproveLeagueJoinRequestUseCase', () => {
|
||||
|
||||
const result = await useCase.execute(
|
||||
{ leagueId, joinRequestId },
|
||||
output as unknown as UseCaseOutputPort<ApproveLeagueJoinRequestResult>,
|
||||
);
|
||||
|
||||
expect(result.isOk()).toBe(true);
|
||||
expect(result.unwrap()).toBeUndefined();
|
||||
expect(result.unwrap()).toEqual({ success: true, message: expect.any(String) });
|
||||
expect(mockLeagueMembershipRepo.removeJoinRequest).toHaveBeenCalledWith(joinRequestId);
|
||||
expect(mockLeagueMembershipRepo.saveMembership).toHaveBeenCalledTimes(1);
|
||||
|
||||
@@ -87,18 +79,12 @@ describe('ApproveLeagueJoinRequestUseCase', () => {
|
||||
expect(savedMembership.status.toString()).toBe('active');
|
||||
expect(savedMembership.joinedAt.toDate()).toBeInstanceOf(Date);
|
||||
|
||||
expect(output.present).toHaveBeenCalledWith({ success: true, message: 'Join request approved.' });
|
||||
});
|
||||
});
|
||||
|
||||
it('approve returns error when request missing', async () => {
|
||||
const output = {
|
||||
present: vi.fn(),
|
||||
};
|
||||
|
||||
const useCase = new ApproveLeagueJoinRequestUseCase(
|
||||
mockLeagueMembershipRepo as unknown as ILeagueMembershipRepository,
|
||||
mockLeagueRepo as unknown as ILeagueRepository,
|
||||
);
|
||||
const useCase = new ApproveLeagueJoinRequestUseCase(mockLeagueMembershipRepo as unknown as ILeagueMembershipRepository,
|
||||
mockLeagueRepo as unknown as ILeagueRepository);
|
||||
|
||||
mockLeagueRepo.findById.mockResolvedValue(
|
||||
League.create({
|
||||
@@ -116,25 +102,18 @@ describe('ApproveLeagueJoinRequestUseCase', () => {
|
||||
|
||||
const result = await useCase.execute(
|
||||
{ leagueId: 'league-1', joinRequestId: 'req-1' },
|
||||
output as unknown as UseCaseOutputPort<ApproveLeagueJoinRequestResult>,
|
||||
);
|
||||
|
||||
expect(result.isOk()).toBe(false);
|
||||
expect(result.error!.code).toBe('JOIN_REQUEST_NOT_FOUND');
|
||||
expect(output.present).not.toHaveBeenCalled();
|
||||
expect(mockLeagueMembershipRepo.removeJoinRequest).not.toHaveBeenCalled();
|
||||
expect(mockLeagueMembershipRepo.saveMembership).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('rejects approval when league is at capacity and does not mutate state', async () => {
|
||||
const output = {
|
||||
present: vi.fn(),
|
||||
};
|
||||
|
||||
const useCase = new ApproveLeagueJoinRequestUseCase(
|
||||
mockLeagueMembershipRepo as unknown as ILeagueMembershipRepository,
|
||||
mockLeagueRepo as unknown as ILeagueRepository,
|
||||
);
|
||||
const useCase = new ApproveLeagueJoinRequestUseCase(mockLeagueMembershipRepo as unknown as ILeagueMembershipRepository,
|
||||
mockLeagueRepo as unknown as ILeagueRepository);
|
||||
|
||||
const leagueId = 'league-1';
|
||||
const joinRequestId = 'req-1';
|
||||
@@ -174,12 +153,10 @@ describe('ApproveLeagueJoinRequestUseCase', () => {
|
||||
|
||||
const result = await useCase.execute(
|
||||
{ leagueId, joinRequestId },
|
||||
output as unknown as UseCaseOutputPort<ApproveLeagueJoinRequestResult>,
|
||||
);
|
||||
|
||||
expect(result.isErr()).toBe(true);
|
||||
expect(result.unwrapErr().code).toBe('LEAGUE_AT_CAPACITY');
|
||||
expect(output.present).not.toHaveBeenCalled();
|
||||
expect(mockLeagueMembershipRepo.removeJoinRequest).not.toHaveBeenCalled();
|
||||
expect(mockLeagueMembershipRepo.saveMembership).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user