From 395b8db932ebec42ddaa15edd9e3441aba9d2f35 Mon Sep 17 00:00:00 2001 From: SabreCat Date: Tue, 23 Aug 2022 09:54:44 -0500 Subject: [PATCH] fix(tasks): fix unassigned error case --- ...T-group_tasks_id_needs-work_userId.test.js | 6 +-- .../server/controllers/api-v3/tasks/groups.js | 37 ++++++++++--------- 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/test/api/v3/integration/tasks/groups/POST-group_tasks_id_needs-work_userId.test.js b/test/api/v3/integration/tasks/groups/POST-group_tasks_id_needs-work_userId.test.js index 1b35e1076b..58392e85e1 100644 --- a/test/api/v3/integration/tasks/groups/POST-group_tasks_id_needs-work_userId.test.js +++ b/test/api/v3/integration/tasks/groups/POST-group_tasks_id_needs-work_userId.test.js @@ -32,9 +32,9 @@ describe('POST /tasks/:id/needs-work/:userId', () => { it('errors when user is not assigned', async () => { await expect(user.post(`/tasks/${task._id}/needs-work/${member._id}`)) .to.eventually.be.rejected.and.to.eql({ - code: 404, - error: 'NotFound', - message: t('messageTaskNotFound'), + code: 400, + error: 'BadRequest', + message: 'Task not completed by this user.', }); }); diff --git a/website/server/controllers/api-v3/tasks/groups.js b/website/server/controllers/api-v3/tasks/groups.js index d32b1254fb..8d0c671421 100644 --- a/website/server/controllers/api-v3/tasks/groups.js +++ b/website/server/controllers/api-v3/tasks/groups.js @@ -356,10 +356,11 @@ api.taskNeedsWork = { if (['daily', 'todo'].indexOf(task.type) === -1) { throw new BadRequest('Cannot roll back use of Habits or Rewards.'); } + if (!task.group.assignedUsersDetail) task.group.assignedUsersDetail = {}; if ( (task.group.completedBy.userId && task.group.completedBy.userId !== assignedUserId) - || (task.group.assignedUsersDetail && !(task.group.assignedUsersDetail[assignedUserId] - && task.group.assignedUsersDetail[assignedUserId].completed))) { + || !(task.group.assignedUsersDetail[assignedUserId] + && task.group.assignedUsersDetail[assignedUserId].completed)) { throw new BadRequest('Task not completed by this user.'); } @@ -370,21 +371,23 @@ api.taskNeedsWork = { if (canNotEditTasks(group, user)) throw new NotAuthorized(res.t('onlyGroupLeaderCanEditTasks')); await scoreTasks(assignedUser, [{ id: task._id, direction: 'down' }], req, res); - assignedUser.addNotification('GROUP_TASK_NEEDS_WORK', { - message: res.t('taskNeedsWork', { taskText: task.text, managerName: user.auth.local.username }, assignedUser.preferences.language), - task: { - id: task._id, - text: task.text, - }, - group: { - id: group._id, - name: group.name, - }, - manager: { - id: user._id, - name: user.auth.local.username, - }, - }); + if (assignedUserId !== user._id) { + assignedUser.addNotification('GROUP_TASK_NEEDS_WORK', { + message: res.t('taskNeedsWork', { taskText: task.text, managerName: user.auth.local.username }, assignedUser.preferences.language), + task: { + id: task._id, + text: task.text, + }, + group: { + id: group._id, + name: group.name, + }, + manager: { + id: user._id, + name: user.auth.local.username, + }, + }); + } await Promise.all([assignedUser.save(), task.save()]); res.respond(200, task);