diff --git a/myteamwallet_backend/src/teams/teams.service.spec.ts b/myteamwallet_backend/src/teams/teams.service.spec.ts index 59d302f..b5ed243 100644 --- a/myteamwallet_backend/src/teams/teams.service.spec.ts +++ b/myteamwallet_backend/src/teams/teams.service.spec.ts @@ -31,6 +31,7 @@ describe('TeamsService#getOverviewStats theoretical balance', () => { access as any, {} as any, {} as any, + { emit: jest.fn() } as any, ); }); @@ -290,6 +291,7 @@ describe('TeamsService#getTeamTransactionsJournal', () => { access as any, {} as any, {} as any, + { emit: jest.fn() } as any, ); }); @@ -410,6 +412,7 @@ describe('TeamsService#createNewTeam', () => { {} as any, {} as any, dataSource as any, + { emit: jest.fn() } as any, ); }); @@ -464,3 +467,50 @@ describe('TeamsService#createNewTeam', () => { 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', + }), + ); + }); +}); diff --git a/myteamwallet_backend/src/teams/teams.service.ts b/myteamwallet_backend/src/teams/teams.service.ts index 2a5a38f..c7464cb 100644 --- a/myteamwallet_backend/src/teams/teams.service.ts +++ b/myteamwallet_backend/src/teams/teams.service.ts @@ -1,6 +1,9 @@ import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; +import { EventEmitter2 } from '@nestjs/event-emitter'; 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 { TeamRole } from 'src/team-roles/entities/team-roles.entity'; import { CreateTeamSettingDTO } from 'src/team-settings/dto/create-team-setting.dto'; @@ -51,6 +54,7 @@ export class TeamsService { @InjectRepository(User) private usersRepository: Repository, private dataSource: DataSource, + private eventEmitter: EventEmitter2, ) {} async getOverview(teamId: string, actorUserId: string) { @@ -165,6 +169,11 @@ export class TeamsService { details: `Spieler ${playerSaved.id}, ${p.firstName} ${p.lastName} erstellt`, userId: Number(id), }); + + this.eventEmitter.emit( + NOTIFICATION_EVENT_NAME.playerCreated, + new PlayerCreatedEvent(Number(id), Number(actorUserId), playerSaved.id, `${p.firstName} ${p.lastName}`), + ); return playerSaved; }