Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions src/presentation/http/router/noteSettings.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -936,6 +936,42 @@ describe('NoteSettings API', () => {

expect(response?.json().message).toBe('You can\'t remove note\'s creator from the team');
});

test('Returns status code 403 and message "You can\'t remove yourself from the team"', async () => {
/** Create note creator */
const creator = await global.db.insertUser();
/** Create test user - member of the team, different from the creator */
const user = await global.db.insertUser();

/** Create test note */
const note = await global.db.insertNote({
creatorId: creator.id,
});

/** Add test user to the note with a Write role */
await global.db.insertNoteTeam({
noteId: note.id,
userId: user.id,
role: MemberRole.Write,
});

const accessToken = global.auth(user.id);

const response = await global.api?.fakeRequest({
method: 'DELETE',
headers: {
authorization: `Bearer ${accessToken}`,
},
url: `/note-settings/${note.publicId}/team`,
body: {
userId: user.id,
},
});

expect(response?.statusCode).toBe(403);

expect(response?.json().message).toBe('You can\'t remove yourself from the team');
});
});

describe('DELETE /:notePublicId/team', () => {
Expand Down
4 changes: 4 additions & 0 deletions src/presentation/http/router/noteSettings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,10 @@ const NoteSettingsRouter: FastifyPluginCallback<NoteSettingsRouterOptions> = (fa
return reply.forbidden('You can\'t remove note\'s creator from the team');
}

if (request.userId === request.body.userId) {
return reply.forbidden('You can\'t remove yourself from the team');
}
Comment on lines +206 to +208

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The sibling guard above (creator check) has a dedicated test at noteSettings.test.ts:913 asserting status code + message. Might be worth adding an equivalent case for this new self-removal guard?


const deletedTeamMemberId = await noteSettingsService.removeTeamMemberByUserIdAndNoteId(userId, noteId);

if (deletedTeamMemberId === undefined) {
Expand Down
Loading