diff --git a/test/api/v3/unit/models/challenge.test.js b/test/api/v3/unit/models/challenge.test.js index f4ea3370b4..1c67f84348 100644 --- a/test/api/v3/unit/models/challenge.test.js +++ b/test/api/v3/unit/models/challenge.test.js @@ -6,32 +6,32 @@ import common from '../../../../../common/'; import { each, find } from 'lodash'; describe('Challenge Model', () => { - let guild, leader, challenge, task; - let tasksToTest = { - habit: { - text: 'test habit', - type: 'habit', - up: false, - down: true, - }, - todo: { - text: 'test todo', - type: 'todo', - }, - daily: { - text: 'test daily', - type: 'daily', - frequency: 'daily', - everyX: 5, - startDate: new Date(), - }, - reward: { - text: 'test reward', - type: 'reward', - }, - }; + let guild, leader, challenge, task, tasksToTest; beforeEach(async () => { + tasksToTest = { + habit: { + text: 'test habit', + type: 'habit', + up: false, + down: true, + }, + todo: { + text: 'test todo', + type: 'todo', + }, + daily: { + text: 'test daily', + type: 'daily', + frequency: 'daily', + everyX: 5, + startDate: new Date(), + }, + reward: { + text: 'test reward', + type: 'reward', + }, + }; guild = new Group({ name: 'test party', type: 'guild', @@ -195,6 +195,24 @@ describe('Challenge Model', () => { expect(updatedUserTask.date).to.exist; }); + it('does not update checklists on the user task', async () => { + task = new Tasks.todo(Tasks.Task.sanitize(tasksToTest.todo)); // eslint-disable-line babel/new-cap + task.challenge.id = challenge._id; + await task.save(); + + await challenge.addTasks([task]); + + task.checklist.push({ + text: 'a new checklist', + }); + await challenge.updateTask(task); + + let updatedLeader = await User.findOne({_id: leader._id}); + let updatedUserTask = await Tasks.Task.findById(updatedLeader.tasksOrder.todos[0]); + + expect(updatedUserTask.checklist).to.deep.equal([]); + }); + it('updates daily specific field to challenge and challenge members', async () => { task = new Tasks.daily(Tasks.Task.sanitize(tasksToTest.daily)); // eslint-disable-line babel/new-cap task.challenge.id = challenge._id; diff --git a/website/server/models/challenge.js b/website/server/models/challenge.js index aa3e68cd48..bcf8984b95 100644 --- a/website/server/models/challenge.js +++ b/website/server/models/challenge.js @@ -75,7 +75,7 @@ schema.methods.canView = function canViewChallenge (user, group) { function _syncableAttrs (task) { let t = task.toObject(); // lodash doesn't seem to like _.omit on Document // only sync/compare important attrs - let omitAttrs = ['_id', 'userId', 'challenge', 'history', 'tags', 'completed', 'streak', 'notes', 'updatedAt']; + let omitAttrs = ['_id', 'userId', 'challenge', 'history', 'tags', 'completed', 'streak', 'notes', 'updatedAt', 'checklist']; if (t.type !== 'reward') omitAttrs.push('value'); return _.omit(t, omitAttrs); } diff --git a/website/views/options/social/challenges.jade b/website/views/options/social/challenges.jade index c528989119..ab84189f6f 100644 --- a/website/views/options/social/challenges.jade +++ b/website/views/options/social/challenges.jade @@ -32,7 +32,7 @@ script(type='text/ng-template', id='partials/options.social.challenges.detail.ht // Edit button div(bindonce='challenge', ng-if='challenge.leader._id==user._id || user.contributor.admin') div(ng-hide='challenge._locked==false') - // button.btn.btn-sm.btn-default(ng-click='edit(challenge)')=env.t('edit') + button.btn.btn-sm.btn-default(ng-click='edit(challenge)')=env.t('edit') button.btn.btn-sm.btn-success(ng-click='clone(challenge)')=env.t('clone') button.btn.btn-sm.btn-warning(ng-click='close(challenge, $event)', tooltip=env.t('deleteOrSelect'))=env.t('endChallenge')