Skip to content

Commit 98746f9

Browse files
authored
Merge pull request #1438 from Northeastern-Electric-Racing/#1187-Heads-Can-Edit-Task-v3
#1187: Heads can now edit project tasks v3
2 parents 40e2948 + 99e6c5b commit 98746f9

3 files changed

Lines changed: 15 additions & 7 deletions

File tree

src/backend/src/services/tasks.services.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,10 @@ export default class TasksService {
9494
*/
9595
static async editTask(user: User, taskId: string, title: string, notes: string, priority: Task_Priority, deadline: Date) {
9696
const hasPermission = await hasPermissionToEditTask(user, taskId);
97-
if (!hasPermission) throw new AccessDeniedException();
97+
if (!hasPermission)
98+
throw new AccessDeniedException(
99+
'Only admins, app admins, heads, task creators, project leads, project managers, or project assignees can edit a task'
100+
);
98101

99102
const originalTask = await prisma.task.findUnique({ where: { taskId } });
100103
if (!originalTask) throw new NotFoundException('Task', taskId);
@@ -129,7 +132,7 @@ export default class TasksService {
129132
const hasPermission = await hasPermissionToEditTask(user, taskId);
130133
if (!hasPermission)
131134
throw new AccessDeniedException(
132-
'Only admins, app admins, task creators, project leads, project managers, or project assignees can edit a task'
135+
'Only admins, app admins, heads, task creators, project leads, project managers, or project assignees can edit a task'
133136
);
134137

135138
const updatedTask = await prisma.task.update({ where: { taskId }, data: { status }, ...taskQueryArgs });
@@ -158,7 +161,7 @@ export default class TasksService {
158161
const hasPermission = await hasPermissionToEditTask(user, taskId);
159162
if (!hasPermission)
160163
throw new AccessDeniedException(
161-
'Only admins, app admins, task creators, project leads, project managers, or project assignees can edit a task'
164+
'Only admins, app admins, heads, task creators, project leads, project managers, or project assignees can edit a task'
162165
);
163166

164167
// this throws if any of the users aren't found

src/backend/tests/tasks.test.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ describe('Tasks', () => {
201201
// Try updating from IN_PROGRESS to IN_BACKLOG
202202
await expect(() => TasksService.editTaskStatus(aquaman, taskId, Task_Status.IN_BACKLOG)).rejects.toThrow(
203203
new AccessDeniedException(
204-
'Only admins, app admins, task creators, project leads, project managers, or project assignees can edit a task'
204+
'Only admins, app admins, heads, task creators, project leads, project managers, or project assignees can edit a task'
205205
)
206206
);
207207
});
@@ -216,7 +216,7 @@ describe('Tasks', () => {
216216
// Aquaman is a leader, but did not create this task
217217
await expect(() => TasksService.editTaskStatus(aquaman, taskId, Task_Status.IN_BACKLOG)).rejects.toThrow(
218218
new AccessDeniedException(
219-
'Only admins, app admins, task creators, project leads, project managers, or project assignees can edit a task'
219+
'Only admins, app admins, heads, task creators, project leads, project managers, or project assignees can edit a task'
220220
)
221221
);
222222
});
@@ -288,7 +288,7 @@ describe('Tasks', () => {
288288
TasksService.editTaskAssignees(aquaman, taskId, [superman.userId, wonderwoman.userId])
289289
).rejects.toThrow(
290290
new AccessDeniedException(
291-
'Only admins, app admins, task creators, project leads, project managers, or project assignees can edit a task'
291+
'Only admins, app admins, heads, task creators, project leads, project managers, or project assignees can edit a task'
292292
)
293293
);
294294
});
@@ -391,7 +391,11 @@ describe('Tasks', () => {
391391
vi.spyOn(taskUtils, 'hasPermissionToEditTask').mockResolvedValue(false);
392392
await expect(() =>
393393
TasksService.editTask(wonderwoman, taskId, fakeTitle, fakeNotes, fakePriority, fakeDeadline)
394-
).rejects.toThrow(new AccessDeniedException());
394+
).rejects.toThrow(
395+
new AccessDeniedException(
396+
'Only admins, app admins, heads, task creators, project leads, project managers, or project assignees can edit a task'
397+
)
398+
);
395399
});
396400

397401
test('Task not found', async () => {

src/frontend/src/pages/ProjectDetailPage/ProjectViewContainer/TaskList/TaskListTabPanel.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ const TaskListTabPanel = (props: TaskListTabPanelProps) => {
123123
(auth.user.role === 'APP_ADMIN' ||
124124
auth.user.role === 'ADMIN' ||
125125
auth.user.role === 'LEADERSHIP' ||
126+
auth.user.role === 'HEAD' ||
126127
project.projectLead?.userId === auth.user.userId ||
127128
project.projectManager?.userId === auth.user.userId ||
128129
task.assignees.map((u) => u.userId).includes(auth.user.userId) ||

0 commit comments

Comments
 (0)