Challenge checklist fix (#7963)

* fix(challenges): don't wipe user xlists

* Add test for challenge checklists not syncing to user
This commit is contained in:
Blade Barringer
2016-09-01 12:34:02 -05:00
committed by Sabe Jones
parent 95d33a1dff
commit 7702f9dccc
3 changed files with 44 additions and 26 deletions

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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')