feat: emit notification events on player active/role changes
This commit is contained in:
@@ -18,6 +18,7 @@ describe('TeamMembersService', () => {
|
||||
let dataSource: any;
|
||||
let logger: any;
|
||||
let access: any;
|
||||
let eventEmitter: any;
|
||||
let service: TeamMembersService;
|
||||
|
||||
beforeEach(() => {
|
||||
@@ -44,7 +45,8 @@ describe('TeamMembersService', () => {
|
||||
dataSource = { transaction: jest.fn((work) => work(manager)) };
|
||||
logger = { info: jest.fn() };
|
||||
access = { assertAtLeast: jest.fn(() => Promise.resolve()) };
|
||||
service = new TeamMembersService(dataSource, logger, access as any);
|
||||
eventEmitter = { emit: jest.fn() };
|
||||
service = new TeamMembersService(dataSource, logger, access as any, eventEmitter as any);
|
||||
});
|
||||
|
||||
it('checks the team-manager permission before touching the database', async () => {
|
||||
@@ -188,6 +190,53 @@ describe('TeamMembersService', () => {
|
||||
).rejects.toBeInstanceOf(NotFoundException);
|
||||
});
|
||||
|
||||
it('emits a player-active-changed event after a real deactivation', async () => {
|
||||
player.balance = 42;
|
||||
treasurers = [player, makePlayer(102, true, TeamRolesEnum.treasurer, 0)];
|
||||
|
||||
await service.setActive(5, teamId, player.id, false);
|
||||
|
||||
expect(eventEmitter.emit).toHaveBeenCalledWith(
|
||||
'notifications.player.active_changed',
|
||||
expect.objectContaining({
|
||||
teamId,
|
||||
actorUserId: 5,
|
||||
playerId: player.id,
|
||||
playerName: 'Pat Player',
|
||||
active: false,
|
||||
}),
|
||||
);
|
||||
});
|
||||
|
||||
it('does not emit when the active state is unchanged (idempotent)', async () => {
|
||||
player = makePlayer(101, true, TeamRolesEnum.player, 0);
|
||||
lockedPlayerQuery = chain({ getOne: jest.fn(() => player) });
|
||||
playerRepository.createQueryBuilder = jest.fn((alias: string) =>
|
||||
alias === 'lockedPlayer' ? lockedPlayerQuery : treasurerLockQuery,
|
||||
);
|
||||
|
||||
await service.setActive(5, teamId, player.id, true);
|
||||
|
||||
expect(eventEmitter.emit).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('emits a player-role-changed event after a real role change', async () => {
|
||||
treasurers = [player, makePlayer(102, true, TeamRolesEnum.treasurer, 0)];
|
||||
|
||||
await service.setTeamRole(5, teamId, player.id, TeamRolesEnum.captain);
|
||||
|
||||
expect(eventEmitter.emit).toHaveBeenCalledWith(
|
||||
'notifications.player.role_changed',
|
||||
expect.objectContaining({
|
||||
teamId,
|
||||
actorUserId: 5,
|
||||
playerId: player.id,
|
||||
playerName: 'Pat Player',
|
||||
teamRoleId: TeamRolesEnum.captain,
|
||||
}),
|
||||
);
|
||||
});
|
||||
|
||||
function makePlayer(
|
||||
id: number,
|
||||
active: boolean,
|
||||
|
||||
Reference in New Issue
Block a user