Some checks failed
CI / lint-typecheck (pull_request) Failing after 4m50s
CI / tests (pull_request) Has been skipped
CI / contract-tests (pull_request) Has been skipped
CI / e2e-tests (pull_request) Has been skipped
CI / comment-pr (pull_request) Has been skipped
CI / commit-types (pull_request) Has been skipped
130 lines
4.3 KiB
TypeScript
130 lines
4.3 KiB
TypeScript
import { describe, it, expect, beforeEach } from 'vitest';
|
|
import { LeaguesTestContext } from '../LeaguesTestContext';
|
|
|
|
describe('League Roster - Actions', () => {
|
|
let context: LeaguesTestContext;
|
|
|
|
beforeEach(() => {
|
|
context = new LeaguesTestContext();
|
|
context.clear();
|
|
});
|
|
|
|
it('should allow a driver to join a public league without approval', async () => {
|
|
const league = await context.createLeague({ approvalRequired: false });
|
|
const driverId = 'driver-joiner';
|
|
|
|
context.driverRepository.addDriver({
|
|
id: driverId,
|
|
name: 'Joiner Driver',
|
|
rating: 1500,
|
|
rank: 100,
|
|
avatar: undefined,
|
|
starts: 0,
|
|
wins: 0,
|
|
podiums: 0,
|
|
leagues: 0
|
|
});
|
|
|
|
await context.joinLeagueUseCase.execute({ leagueId: league.id, driverId });
|
|
|
|
const members = await context.leagueRepository.getLeagueMembers(league.id);
|
|
expect(members.some(m => m.driverId === driverId)).toBe(true);
|
|
});
|
|
|
|
it('should create a pending request when joining a league requiring approval', async () => {
|
|
const league = await context.createLeague({ approvalRequired: true });
|
|
const driverId = 'driver-requester';
|
|
|
|
context.driverRepository.addDriver({
|
|
id: driverId,
|
|
name: 'Requester Driver',
|
|
rating: 1500,
|
|
rank: 100,
|
|
avatar: undefined,
|
|
starts: 0,
|
|
wins: 0,
|
|
podiums: 0,
|
|
leagues: 0
|
|
});
|
|
|
|
await context.joinLeagueUseCase.execute({ leagueId: league.id, driverId });
|
|
|
|
const requests = await context.leagueRepository.getPendingRequests(league.id);
|
|
expect(requests.some(r => r.driverId === driverId)).toBe(true);
|
|
});
|
|
|
|
it('should allow an admin to approve a membership request', async () => {
|
|
const ownerId = 'driver-owner';
|
|
const league = await context.createLeague({ ownerId, approvalRequired: true });
|
|
const driverId = 'driver-requester';
|
|
|
|
context.driverRepository.addDriver({
|
|
id: driverId,
|
|
name: 'Requester Driver',
|
|
rating: 1500,
|
|
rank: 100,
|
|
avatar: undefined,
|
|
starts: 0,
|
|
wins: 0,
|
|
podiums: 0,
|
|
leagues: 0
|
|
});
|
|
await context.joinLeagueUseCase.execute({ leagueId: league.id, driverId });
|
|
|
|
const requests = await context.leagueRepository.getPendingRequests(league.id);
|
|
const requestId = requests[0].id;
|
|
|
|
await context.approveMembershipRequestUseCase.execute({ leagueId: league.id, requestId });
|
|
|
|
const members = await context.leagueRepository.getLeagueMembers(league.id);
|
|
expect(members.some(m => m.driverId === driverId)).toBe(true);
|
|
|
|
const updatedRequests = await context.leagueRepository.getPendingRequests(league.id);
|
|
expect(updatedRequests).toHaveLength(0);
|
|
});
|
|
|
|
it('should allow an admin to reject a membership request', async () => {
|
|
const ownerId = 'driver-owner';
|
|
const league = await context.createLeague({ ownerId, approvalRequired: true });
|
|
const driverId = 'driver-requester';
|
|
|
|
context.driverRepository.addDriver({
|
|
id: driverId,
|
|
name: 'Requester Driver',
|
|
rating: 1500,
|
|
rank: 100,
|
|
avatar: undefined,
|
|
starts: 0,
|
|
wins: 0,
|
|
podiums: 0,
|
|
leagues: 0
|
|
});
|
|
await context.joinLeagueUseCase.execute({ leagueId: league.id, driverId });
|
|
|
|
const requests = await context.leagueRepository.getPendingRequests(league.id);
|
|
const requestId = requests[0].id;
|
|
|
|
await context.rejectMembershipRequestUseCase.execute({ leagueId: league.id, requestId });
|
|
|
|
const members = await context.leagueRepository.getLeagueMembers(league.id);
|
|
expect(members.some(m => m.driverId === driverId)).toBe(false);
|
|
|
|
const updatedRequests = await context.leagueRepository.getPendingRequests(league.id);
|
|
expect(updatedRequests).toHaveLength(0);
|
|
});
|
|
|
|
it('should allow a driver to leave a league', async () => {
|
|
const league = await context.createLeague();
|
|
const driverId = 'driver-leaver';
|
|
|
|
context.leagueRepository.addLeagueMembers(league.id, [
|
|
{ driverId, name: 'Leaver', role: 'member', joinDate: new Date() }
|
|
]);
|
|
|
|
await context.leaveLeagueUseCase.execute({ leagueId: league.id, driverId });
|
|
|
|
const members = await context.leagueRepository.getLeagueMembers(league.id);
|
|
expect(members.some(m => m.driverId === driverId)).toBe(false);
|
|
});
|
|
});
|