feat(core): Add endpoint PATCH /projects/:projectId/folders/:folderId (no-changelog) (#13454)

This commit is contained in:
Ricardo Espinoza
2025-02-26 07:01:22 -05:00
committed by GitHub
parent b50658cbc6
commit f7f5f5e95c
10 changed files with 217 additions and 5 deletions

View File

@@ -279,3 +279,133 @@ describe('GET /projects/:projectId/folders/:folderId/tree', () => {
);
});
});
describe('PATCH /projects/:projectId/folders/:folderId', () => {
test('should not update folder when project does not exist', async () => {
const payload = {
name: 'Updated Folder Name',
};
await authOwnerAgent
.patch('/projects/non-existing-id/folders/some-folder-id')
.send(payload)
.expect(403);
});
test('should not update folder when folder does not exist', async () => {
const project = await createTeamProject('test project', owner);
const payload = {
name: 'Updated Folder Name',
};
await authOwnerAgent
.patch(`/projects/${project.id}/folders/non-existing-folder`)
.send(payload)
.expect(404);
});
test('should not update folder when name is empty', async () => {
const project = await createTeamProject(undefined, owner);
const folder = await createFolder(project, { name: 'Original Name' });
const payload = {
name: '',
};
await authOwnerAgent
.patch(`/projects/${project.id}/folders/${folder.id}`)
.send(payload)
.expect(400);
const folderInDb = await folderRepository.findOneBy({ id: folder.id });
expect(folderInDb?.name).toBe('Original Name');
});
test('should not update folder if user has project:viewer role in team project', async () => {
const project = await createTeamProject(undefined, owner);
const folder = await createFolder(project, { name: 'Original Name' });
await linkUserToProject(member, project, 'project:viewer');
const payload = {
name: 'Updated Folder Name',
};
await authMemberAgent
.patch(`/projects/${project.id}/folders/${folder.id}`)
.send(payload)
.expect(403);
const folderInDb = await folderRepository.findOneBy({ id: folder.id });
expect(folderInDb?.name).toBe('Original Name');
});
test("should not allow updating folder in another user's personal project", async () => {
const ownerPersonalProject = await projectRepository.getPersonalProjectForUserOrFail(owner.id);
const folder = await createFolder(ownerPersonalProject, { name: 'Original Name' });
const payload = {
name: 'Updated Folder Name',
};
await authMemberAgent
.patch(`/projects/${ownerPersonalProject.id}/folders/${folder.id}`)
.send(payload)
.expect(403);
const folderInDb = await folderRepository.findOneBy({ id: folder.id });
expect(folderInDb?.name).toBe('Original Name');
});
test('should update folder if user has project:editor role in team project', async () => {
const project = await createTeamProject(undefined, owner);
const folder = await createFolder(project, { name: 'Original Name' });
await linkUserToProject(member, project, 'project:editor');
const payload = {
name: 'Updated Folder Name',
};
await authMemberAgent
.patch(`/projects/${project.id}/folders/${folder.id}`)
.send(payload)
.expect(200);
const folderInDb = await folderRepository.findOneBy({ id: folder.id });
expect(folderInDb?.name).toBe('Updated Folder Name');
});
test('should update folder if user has project:admin role in team project', async () => {
const project = await createTeamProject(undefined, owner);
const folder = await createFolder(project, { name: 'Original Name' });
const payload = {
name: 'Updated Folder Name',
};
await authOwnerAgent
.patch(`/projects/${project.id}/folders/${folder.id}`)
.send(payload)
.expect(200);
const folderInDb = await folderRepository.findOneBy({ id: folder.id });
expect(folderInDb?.name).toBe('Updated Folder Name');
});
test('should update folder in personal project', async () => {
const personalProject = await projectRepository.getPersonalProjectForUserOrFail(owner.id);
const folder = await createFolder(personalProject, { name: 'Original Name' });
const payload = {
name: 'Updated Folder Name',
};
await authOwnerAgent
.patch(`/projects/${personalProject.id}/folders/${folder.id}`)
.send(payload)
.expect(200);
const folderInDb = await folderRepository.findOneBy({ id: folder.id });
expect(folderInDb?.name).toBe('Updated Folder Name');
});
});