feat: emit notification event on player creation
This commit is contained in:
@@ -31,6 +31,7 @@ describe('TeamsService#getOverviewStats theoretical balance', () => {
|
|||||||
access as any,
|
access as any,
|
||||||
{} as any,
|
{} as any,
|
||||||
{} as any,
|
{} as any,
|
||||||
|
{ emit: jest.fn() } as any,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -290,6 +291,7 @@ describe('TeamsService#getTeamTransactionsJournal', () => {
|
|||||||
access as any,
|
access as any,
|
||||||
{} as any,
|
{} as any,
|
||||||
{} as any,
|
{} as any,
|
||||||
|
{ emit: jest.fn() } as any,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -410,6 +412,7 @@ describe('TeamsService#createNewTeam', () => {
|
|||||||
{} as any,
|
{} as any,
|
||||||
{} as any,
|
{} as any,
|
||||||
dataSource as any,
|
dataSource as any,
|
||||||
|
{ emit: jest.fn() } as any,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -464,3 +467,50 @@ describe('TeamsService#createNewTeam', () => {
|
|||||||
expect(logger.info).not.toHaveBeenCalled();
|
expect(logger.info).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('TeamsService.createNewPlayer', () => {
|
||||||
|
const repository = { findOneBy: jest.fn() };
|
||||||
|
const playerRepository = { create: jest.fn((value) => value), save: jest.fn() };
|
||||||
|
const rolesRepository = { findOneBy: jest.fn() };
|
||||||
|
const logger = { info: jest.fn() };
|
||||||
|
const access = { assertManager: jest.fn() };
|
||||||
|
const eventEmitter = { emit: jest.fn() };
|
||||||
|
let service: TeamsService;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
jest.resetAllMocks();
|
||||||
|
access.assertManager.mockResolvedValue(undefined);
|
||||||
|
rolesRepository.findOneBy.mockResolvedValue({ id: 1, name: 'player' });
|
||||||
|
repository.findOneBy.mockResolvedValue({ id: 10, name: 'Team A' });
|
||||||
|
playerRepository.save.mockImplementation((value) =>
|
||||||
|
Promise.resolve({ ...value, id: 55 }),
|
||||||
|
);
|
||||||
|
service = new TeamsService(
|
||||||
|
repository as any,
|
||||||
|
playerRepository as any,
|
||||||
|
{} as any,
|
||||||
|
rolesRepository as any,
|
||||||
|
{} as any,
|
||||||
|
{} as any,
|
||||||
|
logger as any,
|
||||||
|
access as any,
|
||||||
|
{} as any,
|
||||||
|
{} as any,
|
||||||
|
eventEmitter as any,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('emits a player-created event with the new player id and name', async () => {
|
||||||
|
await service.createNewPlayer('10', { firstName: 'Ada', lastName: 'Lovelace', teamRole: undefined }, '5');
|
||||||
|
|
||||||
|
expect(eventEmitter.emit).toHaveBeenCalledWith(
|
||||||
|
'notifications.player.created',
|
||||||
|
expect.objectContaining({
|
||||||
|
teamId: 10,
|
||||||
|
actorUserId: 5,
|
||||||
|
playerId: 55,
|
||||||
|
playerName: 'Ada Lovelace',
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
|
import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
|
||||||
import { InjectRepository } from '@nestjs/typeorm';
|
import { InjectRepository } from '@nestjs/typeorm';
|
||||||
|
import { EventEmitter2 } from '@nestjs/event-emitter';
|
||||||
import { LoggingService } from 'src/database/logging/logging.service';
|
import { LoggingService } from 'src/database/logging/logging.service';
|
||||||
|
import { NOTIFICATION_EVENT_NAME } from '../notifications/events/notification-event-names';
|
||||||
|
import { PlayerCreatedEvent } from '../notifications/events/player-created.event';
|
||||||
import { Player } from 'src/players/entities/player.entity';
|
import { Player } from 'src/players/entities/player.entity';
|
||||||
import { TeamRole } from 'src/team-roles/entities/team-roles.entity';
|
import { TeamRole } from 'src/team-roles/entities/team-roles.entity';
|
||||||
import { CreateTeamSettingDTO } from 'src/team-settings/dto/create-team-setting.dto';
|
import { CreateTeamSettingDTO } from 'src/team-settings/dto/create-team-setting.dto';
|
||||||
@@ -51,6 +54,7 @@ export class TeamsService {
|
|||||||
@InjectRepository(User)
|
@InjectRepository(User)
|
||||||
private usersRepository: Repository<User>,
|
private usersRepository: Repository<User>,
|
||||||
private dataSource: DataSource,
|
private dataSource: DataSource,
|
||||||
|
private eventEmitter: EventEmitter2,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
async getOverview(teamId: string, actorUserId: string) {
|
async getOverview(teamId: string, actorUserId: string) {
|
||||||
@@ -165,6 +169,11 @@ export class TeamsService {
|
|||||||
details: `Spieler ${playerSaved.id}, ${p.firstName} ${p.lastName} erstellt`,
|
details: `Spieler ${playerSaved.id}, ${p.firstName} ${p.lastName} erstellt`,
|
||||||
userId: Number(id),
|
userId: Number(id),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.eventEmitter.emit(
|
||||||
|
NOTIFICATION_EVENT_NAME.playerCreated,
|
||||||
|
new PlayerCreatedEvent(Number(id), Number(actorUserId), playerSaved.id, `${p.firstName} ${p.lastName}`),
|
||||||
|
);
|
||||||
return playerSaved;
|
return playerSaved;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user