import { describe, it, expect, vi, type Mock } from 'vitest'; import { RejectLeagueJoinRequestUseCase, type RejectLeagueJoinRequestUseCaseParams } from './RejectLeagueJoinRequestUseCase'; import type { ILeagueMembershipRepository } from '../../domain/repositories/ILeagueMembershipRepository'; interface LeagueMembershipRepositoryMock { removeJoinRequest: Mock; } describe('RejectLeagueJoinRequestUseCase', () => { let leagueMembershipRepository: LeagueMembershipRepositoryMock; let useCase: RejectLeagueJoinRequestUseCase; beforeEach(() => { leagueMembershipRepository = { removeJoinRequest: vi.fn(), } as unknown as ILeagueMembershipRepository as any; useCase = new RejectLeagueJoinRequestUseCase( leagueMembershipRepository as unknown as ILeagueMembershipRepository, ); }); it('removes the join request and returns success output', async () => { const params: RejectLeagueJoinRequestUseCaseParams = { requestId: 'req-1', }; (leagueMembershipRepository.removeJoinRequest as Mock).mockResolvedValue(undefined); const result = await useCase.execute(params); expect(leagueMembershipRepository.removeJoinRequest).toHaveBeenCalledWith('req-1'); expect(result.isOk()).toBe(true); expect(result.unwrap()).toEqual({ success: true, message: 'Join request rejected.' }); }); });