diff --git a/test/common/ops/scoreTask.test.js b/test/common/ops/scoreTask.test.js index bbd44aff79..478eb02733 100644 --- a/test/common/ops/scoreTask.test.js +++ b/test/common/ops/scoreTask.test.js @@ -291,11 +291,14 @@ describe('shared.ops.scoreTask', () => { scoreTask({user: ref.afterUser, task: daily, direction: 'up'}); expectGainedPoints(ref.beforeUser, ref.afterUser, freshDaily, daily); expect(daily.completed).to.eql(true); + expect(daily.history.length).to.eql(1); }); it('up, down', () => { scoreTask({user: ref.afterUser, task: daily, direction: 'up'}); + expect(daily.history.length).to.eql(1); scoreTask({user: ref.afterUser, task: daily, direction: 'down'}); + expect(daily.history.length).to.eql(0); expectClosePoints(ref.beforeUser, ref.afterUser, freshDaily, daily); }); diff --git a/website/common/script/ops/scoreTask.js b/website/common/script/ops/scoreTask.js index b199d49737..78e5e39451 100644 --- a/website/common/script/ops/scoreTask.js +++ b/website/common/script/ops/scoreTask.js @@ -243,11 +243,24 @@ module.exports = function scoreTask (options = {}, req = {}) { if (user.addNotification) user.addNotification('STREAK_ACHIEVEMENT'); } task.completed = true; + + // Save history entry for daily + task.history = task.history || []; + let historyEntry = { + date: Number(new Date()), + value: task.value, + }; + task.history.push(historyEntry); } else if (direction === 'down') { // Remove a streak achievement if streak was a multiple of 21 and the daily was undone if (task.streak !== 0 && task.streak % 21 === 0) user.achievements.streak = user.achievements.streak ? user.achievements.streak - 1 : 0; task.streak -= 1; task.completed = false; + + // Delete history entry when daily unchecked + if (task.history || task.history.length > 0) { + task.history.splice(-1, 1); + } } } } else if (task.type === 'todo') { diff --git a/website/server/libs/cron.js b/website/server/libs/cron.js index 6c4cb90aeb..6a12b0c0af 100644 --- a/website/server/libs/cron.js +++ b/website/server/libs/cron.js @@ -357,14 +357,15 @@ export function cron (options = {}) { } } } + + // add history entry when task was not completed + task.history.push({ + date: Number(new Date()), + value: task.value, + }); } - task.history.push({ - date: Number(new Date()), - value: task.value, - }); task.completed = false; - setIsDueNextDue(task, user, now); if (completed || scheduleMisses > 0) {