51 lines
1.8 KiB
TypeScript
51 lines
1.8 KiB
TypeScript
import type { ApplicationErrorCode } from '@core/shared/errors/ApplicationErrorCode';
|
|
import { beforeEach, describe, expect, it, vi, type Mock } from 'vitest';
|
|
import type { LeagueMembershipRepository } from '../../domain/repositories/LeagueMembershipRepository';
|
|
import {
|
|
RejectLeagueJoinRequestUseCase,
|
|
} from './RejectLeagueJoinRequestUseCase';
|
|
|
|
describe('RejectLeagueJoinRequestUseCase', () => {
|
|
let leagueMembershipRepository: {
|
|
getJoinRequests: Mock;
|
|
removeJoinRequest: Mock;
|
|
};
|
|
|
|
beforeEach(() => {
|
|
leagueMembershipRepository = {
|
|
getJoinRequests: vi.fn(),
|
|
removeJoinRequest: vi.fn(),
|
|
};
|
|
});
|
|
|
|
it('reject removes request only', async () => {
|
|
const useCase = new RejectLeagueJoinRequestUseCase(leagueMembershipRepository as unknown as LeagueMembershipRepository);
|
|
|
|
leagueMembershipRepository.getJoinRequests.mockResolvedValue([
|
|
{ id: 'jr-1', leagueId: 'league-1', driverId: 'driver-1' },
|
|
]);
|
|
|
|
const result = await useCase.execute(
|
|
{ leagueId: 'league-1', joinRequestId: 'jr-1' },
|
|
);
|
|
|
|
expect(result.isOk()).toBe(true);
|
|
expect(leagueMembershipRepository.removeJoinRequest).toHaveBeenCalledWith('jr-1');
|
|
});
|
|
|
|
it('reject returns error when request missing', async () => {
|
|
const useCase = new RejectLeagueJoinRequestUseCase(leagueMembershipRepository as unknown as LeagueMembershipRepository);
|
|
|
|
leagueMembershipRepository.getJoinRequests.mockResolvedValue([]);
|
|
|
|
const result = await useCase.execute(
|
|
{ leagueId: 'league-1', joinRequestId: 'jr-404' },
|
|
);
|
|
|
|
expect(result.isErr()).toBe(true);
|
|
const err = result.unwrapErr() as ApplicationErrorCode<'JOIN_REQUEST_NOT_FOUND'>;
|
|
expect(err.code).toBe('JOIN_REQUEST_NOT_FOUND');
|
|
expect(leagueMembershipRepository.removeJoinRequest).not.toHaveBeenCalled();
|
|
});
|
|
});
|