wip league admin tools

This commit is contained in:
2025-12-28 12:04:12 +01:00
parent 5dc8c2399c
commit 6edf12fda8
401 changed files with 15365 additions and 6047 deletions

View File

@@ -11,12 +11,13 @@ import type { ApplicationErrorCode } from '@core/shared/errors/ApplicationErrorC
describe('RemoveLeagueMemberUseCase', () => {
let useCase: RemoveLeagueMemberUseCase;
let leagueMembershipRepository: { getMembership: Mock; saveMembership: Mock };
let leagueMembershipRepository: { getMembership: Mock; getLeagueMembers: Mock; saveMembership: Mock };
let output: UseCaseOutputPort<RemoveLeagueMemberResult> & { present: Mock };
beforeEach(() => {
leagueMembershipRepository = {
getMembership: vi.fn(),
getLeagueMembers: vi.fn(),
saveMembership: vi.fn(),
};
output = {
@@ -104,4 +105,33 @@ describe('RemoveLeagueMemberUseCase', () => {
expect(output.present).not.toHaveBeenCalled();
});
it('prevents removing the last owner', async () => {
const leagueId = 'league-1';
const targetDriverId = 'owner-1';
const membership = {
id: `${leagueId}:${targetDriverId}`,
leagueId: { toString: () => leagueId },
driverId: { toString: () => targetDriverId },
role: { toString: () => 'owner' },
status: { toString: () => 'active' },
joinedAt: { toDate: () => new Date() },
};
leagueMembershipRepository.getMembership.mockResolvedValue(membership);
leagueMembershipRepository.getLeagueMembers.mockResolvedValue([membership]);
const result = await useCase.execute({ leagueId, targetDriverId });
expect(result.isErr()).toBe(true);
const error = result.unwrapErr() as ApplicationErrorCode<
RemoveLeagueMemberErrorCode,
{ message: string }
>;
expect(error.code).toBe('CANNOT_REMOVE_LAST_OWNER');
expect(output.present).not.toHaveBeenCalled();
expect(leagueMembershipRepository.saveMembership).not.toHaveBeenCalled();
});
});