feat: make team creator a captain of the new team
This commit is contained in:
@@ -29,6 +29,7 @@ describe('TeamsService#getOverviewStats theoretical balance', () => {
|
|||||||
{} as any,
|
{} as any,
|
||||||
{ info: jest.fn(), debug: jest.fn(), warn: jest.fn() } as any,
|
{ info: jest.fn(), debug: jest.fn(), warn: jest.fn() } as any,
|
||||||
access as any,
|
access as any,
|
||||||
|
{} as any,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -286,6 +287,7 @@ describe('TeamsService#getTeamTransactionsJournal', () => {
|
|||||||
{} as any,
|
{} as any,
|
||||||
{ info: jest.fn(), debug: jest.fn(), warn: jest.fn() } as any,
|
{ info: jest.fn(), debug: jest.fn(), warn: jest.fn() } as any,
|
||||||
access as any,
|
access as any,
|
||||||
|
{} as any,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -362,3 +364,59 @@ describe('TeamsService#getTeamTransactionsJournal', () => {
|
|||||||
expect(repository.findOneOrFail).not.toHaveBeenCalled();
|
expect(repository.findOneOrFail).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('TeamsService#createNewTeam', () => {
|
||||||
|
const repository = { create: jest.fn(), save: jest.fn() };
|
||||||
|
const playerRepository = { create: jest.fn(), save: jest.fn() };
|
||||||
|
const rolesRepository = { findOneBy: jest.fn() };
|
||||||
|
const settingsRepository = { create: jest.fn(), save: jest.fn() };
|
||||||
|
const usersRepository = { findOneBy: jest.fn() };
|
||||||
|
const logger = { info: jest.fn(), debug: jest.fn(), warn: jest.fn() };
|
||||||
|
let service: TeamsService;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
jest.resetAllMocks();
|
||||||
|
service = new TeamsService(
|
||||||
|
repository as any,
|
||||||
|
playerRepository as any,
|
||||||
|
{} as any,
|
||||||
|
rolesRepository as any,
|
||||||
|
settingsRepository as any,
|
||||||
|
{} as any,
|
||||||
|
logger as any,
|
||||||
|
{} as any,
|
||||||
|
usersRepository as any,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('creates the team, its default settings, and a captain membership for the creator', async () => {
|
||||||
|
const savedTeam = { id: 7, name: '1. Herren' };
|
||||||
|
repository.create.mockReturnValue({ name: '1. Herren' });
|
||||||
|
repository.save.mockResolvedValue(savedTeam);
|
||||||
|
settingsRepository.create.mockImplementation((s: unknown) => s);
|
||||||
|
settingsRepository.save.mockResolvedValue([]);
|
||||||
|
usersRepository.findOneBy.mockResolvedValue({
|
||||||
|
id: 42,
|
||||||
|
firstName: 'Alex',
|
||||||
|
lastName: 'Muster',
|
||||||
|
});
|
||||||
|
rolesRepository.findOneBy.mockResolvedValue({ id: 3, name: 'captain' });
|
||||||
|
playerRepository.create.mockImplementation((p: unknown) => p);
|
||||||
|
playerRepository.save.mockResolvedValue({});
|
||||||
|
|
||||||
|
const result = await service.createNewTeam({ name: '1. Herren' } as any, '42');
|
||||||
|
|
||||||
|
expect(result).toBe(savedTeam);
|
||||||
|
expect(rolesRepository.findOneBy).toHaveBeenCalledWith({ id: 3 });
|
||||||
|
expect(usersRepository.findOneBy).toHaveBeenCalledWith({ id: 42 });
|
||||||
|
expect(playerRepository.create).toHaveBeenCalledWith(
|
||||||
|
expect.objectContaining({
|
||||||
|
firstName: 'Alex',
|
||||||
|
lastName: 'Muster',
|
||||||
|
team: savedTeam,
|
||||||
|
teamRole: { id: 3, name: 'captain' },
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
expect(playerRepository.save).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ import { TeamSetting } from 'src/team-settings/entities/team-setting.entity';
|
|||||||
import { TEAM_SETTING_DEFAULTS } from 'src/team-settings/team-setting-defaults';
|
import { TEAM_SETTING_DEFAULTS } from 'src/team-settings/team-setting-defaults';
|
||||||
import { TeamWalletTransaction } from 'src/team-wallet-transactions/entities/team-wallet-transaction.entity';
|
import { TeamWalletTransaction } from 'src/team-wallet-transactions/entities/team-wallet-transaction.entity';
|
||||||
import { Transaction } from 'src/transactions/entitites/transaction.entity';
|
import { Transaction } from 'src/transactions/entitites/transaction.entity';
|
||||||
|
import { TeamRolesEnum } from 'src/team-roles/team-roles.enum';
|
||||||
|
import { User } from 'src/users/entities/user.entity';
|
||||||
import { Repository } from 'typeorm';
|
import { Repository } from 'typeorm';
|
||||||
import {
|
import {
|
||||||
TransactionsQueryDto,
|
TransactionsQueryDto,
|
||||||
@@ -46,6 +48,8 @@ export class TeamsService {
|
|||||||
private teamWalletTransactionRepository: Repository<TeamWalletTransaction>,
|
private teamWalletTransactionRepository: Repository<TeamWalletTransaction>,
|
||||||
private logger: LoggingService,
|
private logger: LoggingService,
|
||||||
private access: TeamAccessService,
|
private access: TeamAccessService,
|
||||||
|
@InjectRepository(User)
|
||||||
|
private usersRepository: Repository<User>,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
async getOverview(teamId: string, actorUserId: string) {
|
async getOverview(teamId: string, actorUserId: string) {
|
||||||
@@ -168,6 +172,7 @@ export class TeamsService {
|
|||||||
|
|
||||||
const team = await this.repository.save(createTeam);
|
const team = await this.repository.save(createTeam);
|
||||||
await this.generateBasicTeamSettings(team);
|
await this.generateBasicTeamSettings(team);
|
||||||
|
await this.addCreatorAsCaptain(team, userId);
|
||||||
|
|
||||||
await this.logger.info({
|
await this.logger.info({
|
||||||
event: 'team_create',
|
event: 'team_create',
|
||||||
@@ -177,6 +182,23 @@ export class TeamsService {
|
|||||||
return team;
|
return team;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async addCreatorAsCaptain(team: Team, userId: string): Promise<void> {
|
||||||
|
const [user, captainRole] = await Promise.all([
|
||||||
|
this.usersRepository.findOneBy({ id: Number(userId) }),
|
||||||
|
this.rolesRepository.findOneBy({ id: TeamRolesEnum.captain }),
|
||||||
|
]);
|
||||||
|
|
||||||
|
const player = this.playerRepository.create({
|
||||||
|
firstName: user?.firstName ?? '',
|
||||||
|
lastName: user?.lastName ?? '',
|
||||||
|
team,
|
||||||
|
teamRole: captainRole,
|
||||||
|
user: user ?? undefined,
|
||||||
|
});
|
||||||
|
|
||||||
|
await this.playerRepository.save(player);
|
||||||
|
}
|
||||||
|
|
||||||
private async generateBasicTeamSettings(team: Team): Promise<void> {
|
private async generateBasicTeamSettings(team: Team): Promise<void> {
|
||||||
const settings: CreateTeamSettingDTO[] = Object.entries(
|
const settings: CreateTeamSettingDTO[] = Object.entries(
|
||||||
TEAM_SETTING_DEFAULTS,
|
TEAM_SETTING_DEFAULTS,
|
||||||
|
|||||||
Reference in New Issue
Block a user