diff --git a/test/api/v3/integration/tasks/POST-tasks_user.test.js b/test/api/v3/integration/tasks/POST-tasks_user.test.js index 0c467c2891..99d2896e3b 100644 --- a/test/api/v3/integration/tasks/POST-tasks_user.test.js +++ b/test/api/v3/integration/tasks/POST-tasks_user.test.js @@ -152,14 +152,14 @@ describe('POST /tasks/user', () => { text: 'test habit', type: 'habit', reminders: [ - {id: id1, startDate: new Date(), time: new Date()}, + {_id: id1, startDate: new Date(), time: new Date()}, ], }); expect(task.reminders).to.be.an('array'); expect(task.reminders.length).to.eql(1); expect(task.reminders[0]).to.be.an('object'); - expect(task.reminders[0].id).to.eql(id1); + expect(task.reminders[0]._id).to.eql(id1); expect(task.reminders[0].startDate).to.be.a('string'); // json doesn't have dates expect(task.reminders[0].time).to.be.a('string'); }); diff --git a/test/api/v3/integration/tasks/PUT-tasks_id.test.js b/test/api/v3/integration/tasks/PUT-tasks_id.test.js index c5bc5d050f..79a45a09ad 100644 --- a/test/api/v3/integration/tasks/PUT-tasks_id.test.js +++ b/test/api/v3/integration/tasks/PUT-tasks_id.test.js @@ -80,14 +80,14 @@ describe('PUT /tasks/:id', () => { let savedDaily = await user.put(`/tasks/${daily._id}`, { reminders: [ - {id: id1, time: new Date(), startDate: new Date()}, - {id: id2, time: new Date(), startDate: new Date()}, + {_id: id1, time: new Date(), startDate: new Date()}, + {_id: id2, time: new Date(), startDate: new Date()}, ], }); expect(savedDaily.reminders.length).to.equal(2); - expect(savedDaily.reminders[0].id).to.equal(id1); - expect(savedDaily.reminders[1].id).to.equal(id2); + expect(savedDaily.reminders[0]._id).to.equal(id1); + expect(savedDaily.reminders[1]._id).to.equal(id2); }); }); diff --git a/website/src/controllers/api-v3/tasks.js b/website/src/controllers/api-v3/tasks.js index 527bb90265..16c0457bbf 100644 --- a/website/src/controllers/api-v3/tasks.js +++ b/website/src/controllers/api-v3/tasks.js @@ -304,24 +304,7 @@ api.updateTask = { throw new NotFound(res.t('taskNotFound')); } - // If reminders are updated -> replace the original ones - if (req.body.reminders) { - task.reminders = req.body.reminders; - delete req.body.reminders; - } - - // If checklist is updated -> replace the original one - if (req.body.checklist) { - task.checklist = req.body.checklist; - delete req.body.checklist; - } - - // If tags are updated -> replace the original ones - if (req.body.tags) { - task.tags = req.body.tags; - delete req.body.tags; - } - + Tasks.Task.sanitize(req.body); // TODO we have to convert task to an object because otherwise things don't get merged correctly. Bad for performances? // TODO regarding comment above, make sure other models with nested fields are using this trick too _.assign(task, common.ops.updateTask(task.toObject(), req)); diff --git a/website/src/models/task.js b/website/src/models/task.js index 66cd0ef524..1a6d201037 100644 --- a/website/src/models/task.js +++ b/website/src/models/task.js @@ -60,12 +60,6 @@ TaskSchema.statics.sanitizeCreate = function sanitizeCreate (createObj) { return this.sanitize(createObj, noCreate); }; -// A list of additional fields that cannot be updated (but can be set on creation) -let noUpdate = ['_id', 'type']; -TaskSchema.statics.sanitizeUpdate = function sanitizeUpdate (updateObj) { - return this.sanitize(updateObj, noUpdate); -}; - // Sanitize checklist objects (disallowing _id) TaskSchema.statics.sanitizeChecklist = function sanitizeChecklist (checklistObj) { delete checklistObj._id;