feat(API): Add user management endpoints to the Projects Public API (#12329)

Co-authored-by: कारतोफ्फेलस्क्रिप्ट™ <aditya@netroy.in>
Co-authored-by: Danny Martini <danny@n8n.io>
Co-authored-by: Andreas Fitzek <andreas.fitzek@n8n.io>
Co-authored-by: Guillaume Jacquart <jacquart.guillaume@gmail.com>
This commit is contained in:
Marc Littlemore
2025-05-30 12:04:38 +01:00
committed by GitHub
parent c229e915ea
commit 4459c7e7b1
25 changed files with 1391 additions and 71 deletions

View File

@@ -52,7 +52,7 @@ describe('ProjectService', () => {
//
// ACT
//
await projectService.addUser(project.id, member.id, role);
await projectService.addUser(project.id, { userId: member.id, role });
//
// ASSERT
@@ -74,7 +74,7 @@ describe('ProjectService', () => {
type: 'team',
}),
);
await projectService.addUser(project.id, member.id, 'project:viewer');
await projectService.addUser(project.id, { userId: member.id, role: 'project:viewer' });
await projectRelationRepository.findOneOrFail({
where: { userId: member.id, projectId: project.id, role: 'project:viewer' },
@@ -83,7 +83,7 @@ describe('ProjectService', () => {
//
// ACT
//
await projectService.addUser(project.id, member.id, 'project:admin');
await projectService.addUser(project.id, { userId: member.id, role: 'project:admin' });
//
// ASSERT
@@ -117,7 +117,7 @@ describe('ProjectService', () => {
type: 'team',
}),
);
await projectService.addUser(project.id, projectOwner.id, role);
await projectService.addUser(project.id, { userId: projectOwner.id, role });
//
// ACT
@@ -157,7 +157,7 @@ describe('ProjectService', () => {
type: 'team',
}),
);
await projectService.addUser(project.id, projectViewer.id, role);
await projectService.addUser(project.id, { userId: projectViewer.id, role });
//
// ACT
@@ -200,4 +200,44 @@ describe('ProjectService', () => {
expect(projectFromService).toBeNull();
});
});
describe('deleteUserFromProject', () => {
it('should not allow project owner to be removed from the project', async () => {
const role = 'project:personalOwner';
const user = await createMember();
const project = await projectRepository.save(
projectRepository.create({
name: 'Team Project',
type: 'team',
}),
);
await projectService.addUser(project.id, { userId: user.id, role });
await expect(projectService.deleteUserFromProject(project.id, user.id)).rejects.toThrowError(
/^Project owner cannot be removed from the project$/,
);
});
it('should remove user from project if not owner', async () => {
const role = 'project:editor';
const user = await createMember();
const project = await projectRepository.save(
projectRepository.create({
name: 'Team Project',
type: 'team',
}),
);
await projectService.addUser(project.id, { userId: user.id, role });
await projectService.deleteUserFromProject(project.id, user.id);
const relations = await projectRelationRepository.findOne({
where: { userId: user.id, projectId: project.id, role },
});
expect(relations).toBeNull();
});
});
});