From 92eacbc5bb01ea7f613638042e2f20468f1f888c Mon Sep 17 00:00:00 2001 From: Bastian Wagner Date: Mon, 3 Aug 2026 15:38:43 +0200 Subject: [PATCH] feat: allow any logged-in user to create a team --- .../src/teams/teams.controller.spec.ts | 38 +++++++++++++++++++ .../src/teams/teams.controller.ts | 2 +- 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 myteamwallet_backend/src/teams/teams.controller.spec.ts diff --git a/myteamwallet_backend/src/teams/teams.controller.spec.ts b/myteamwallet_backend/src/teams/teams.controller.spec.ts new file mode 100644 index 0000000..9794ff9 --- /dev/null +++ b/myteamwallet_backend/src/teams/teams.controller.spec.ts @@ -0,0 +1,38 @@ +import { GUARDS_METADATA } from '@nestjs/common/constants'; +import { RoleEnum } from '../roles/roles.enum'; +import { RolesGuard } from '../roles/roles.guard'; +import { TeamsController } from './teams.controller'; + +describe('TeamsController', () => { + const service = { createNewTeam: jest.fn() }; + const publicAccess = {}; + const teamMembers = {}; + const teamPermissions = {}; + const controller = new TeamsController( + service as any, + publicAccess as any, + teamMembers as any, + teamPermissions as any, + ); + + beforeEach(() => jest.clearAllMocks()); + + it('allows any logged-in user (not just admins) to create a team', () => { + expect(Reflect.getMetadata('roles', TeamsController.prototype.create)).toEqual([ + RoleEnum.user, + RoleEnum.admin, + ]); + expect( + Reflect.getMetadata(GUARDS_METADATA, TeamsController.prototype.create), + ).toContain(RolesGuard); + }); + + it('passes the authenticated user and the DTO to the service', () => { + const req = { user: { id: 42 } }; + const dto = { name: '1. Herren' }; + + controller.create(req as any, dto as any); + + expect(service.createNewTeam).toHaveBeenCalledWith(dto, 42); + }); +}); diff --git a/myteamwallet_backend/src/teams/teams.controller.ts b/myteamwallet_backend/src/teams/teams.controller.ts index da85bb9..94b6925 100644 --- a/myteamwallet_backend/src/teams/teams.controller.ts +++ b/myteamwallet_backend/src/teams/teams.controller.ts @@ -244,7 +244,7 @@ export class TeamsController { 'Erstellt ein neues Team mit gegebenem Namen und gibt es zurück.', }) @ApiBearerAuth() - @Roles([RoleEnum.admin]) + @Roles([RoleEnum.user, RoleEnum.admin]) @UseGuards(AuthGuard('jwt'), RolesGuard) @Post() @HttpCode(HttpStatus.CREATED)