diff --git a/test/api/v3/integration/tasks/challenges/POST-tasks_challenge_id.test.js b/test/api/v3/integration/tasks/challenges/POST-tasks_challenge_id.test.js index 1926e40059..b17672d2d6 100644 --- a/test/api/v3/integration/tasks/challenges/POST-tasks_challenge_id.test.js +++ b/test/api/v3/integration/tasks/challenges/POST-tasks_challenge_id.test.js @@ -5,12 +5,17 @@ import { translate as t, } from '../../../../../helpers/api-v3-integration.helper'; import { v4 as generateUUID } from 'uuid'; +import { find } from 'lodash'; describe('POST /tasks/challenge/:challengeId', () => { let user; let guild; let challenge; + function findUserChallengeTask (memberTask) { + return memberTask.challenge.id === challenge._id; + } + beforeEach(async () => { user = await generateUser({balance: 1}); guild = await generateGroup(user); @@ -88,6 +93,9 @@ describe('POST /tasks/challenge/:challengeId', () => { }); let challengeWithTask = await user.get(`/challenges/${challenge._id}`); + let memberTasks = await user.get('/tasks/user'); + let userChallengeTask = find(memberTasks, findUserChallengeTask); + expect(challengeWithTask.tasksOrder.habits.indexOf(task._id)).to.be.above(-1); expect(task.challenge.id).to.equal(challenge._id); expect(task.text).to.eql('test habit'); @@ -95,6 +103,8 @@ describe('POST /tasks/challenge/:challengeId', () => { expect(task.type).to.eql('habit'); expect(task.up).to.eql(false); expect(task.down).to.eql(true); + + expect(userChallengeTask.notes).to.eql(task.notes); }); it('creates a todo', async () => { @@ -105,11 +115,16 @@ describe('POST /tasks/challenge/:challengeId', () => { }); let challengeWithTask = await user.get(`/challenges/${challenge._id}`); + let memberTasks = await user.get('/tasks/user'); + let userChallengeTask = find(memberTasks, findUserChallengeTask); + expect(challengeWithTask.tasksOrder.todos.indexOf(task._id)).to.be.above(-1); expect(task.challenge.id).to.equal(challenge._id); expect(task.text).to.eql('test todo'); expect(task.notes).to.eql('1976'); expect(task.type).to.eql('todo'); + + expect(userChallengeTask.notes).to.eql(task.notes); }); it('creates a daily', async () => { @@ -124,6 +139,9 @@ describe('POST /tasks/challenge/:challengeId', () => { }); let challengeWithTask = await user.get(`/challenges/${challenge._id}`); + let memberTasks = await user.get('/tasks/user'); + let userChallengeTask = find(memberTasks, findUserChallengeTask); + expect(challengeWithTask.tasksOrder.dailys.indexOf(task._id)).to.be.above(-1); expect(task.challenge.id).to.equal(challenge._id); expect(task.text).to.eql('test daily'); @@ -132,5 +150,7 @@ describe('POST /tasks/challenge/:challengeId', () => { expect(task.frequency).to.eql('daily'); expect(task.everyX).to.eql(5); expect(new Date(task.startDate)).to.eql(now); + + expect(userChallengeTask.notes).to.eql(task.notes); }); }); diff --git a/test/api/v3/unit/models/challenge.test.js b/test/api/v3/unit/models/challenge.test.js index 55cc68a1d5..6e8895527b 100644 --- a/test/api/v3/unit/models/challenge.test.js +++ b/test/api/v3/unit/models/challenge.test.js @@ -6,32 +6,36 @@ import common from '../../../../../website/common/'; import { each, find } from 'lodash'; describe('Challenge Model', () => { - let guild, leader, challenge, task, tasksToTest; + let guild, leader, challenge, task; + let tasksToTest = { + habit: { + text: 'test habit', + type: 'habit', + up: false, + down: true, + notes: 'test notes', + }, + todo: { + text: 'test todo', + type: 'todo', + notes: 'test notes', + }, + daily: { + text: 'test daily', + type: 'daily', + frequency: 'daily', + everyX: 5, + startDate: new Date(), + notes: 'test notes', + }, + reward: { + text: 'test reward', + type: 'reward', + notes: 'test notes', + }, + }; 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', @@ -77,6 +81,7 @@ describe('Challenge Model', () => { }); expect(syncedTask).to.exist; + expect(syncedTask.notes).to.eql(task.notes); }); it('syncs a challenge to a user', async () => { @@ -96,8 +101,8 @@ describe('Challenge Model', () => { }); expect(updatedNewMember.challenges).to.contain(challenge._id); - expect(updatedNewMember.tags[3].id).to.equal(challenge._id); - expect(updatedNewMember.tags[3].name).to.equal(challenge.shortName); + expect(updatedNewMember.tags[7].id).to.equal(challenge._id); + expect(updatedNewMember.tags[7].name).to.equal(challenge.shortName); expect(syncedTask).to.exist; }); diff --git a/website/server/models/challenge.js b/website/server/models/challenge.js index 6de0451ee6..e4c26c6f5f 100644 --- a/website/server/models/challenge.js +++ b/website/server/models/challenge.js @@ -157,6 +157,7 @@ async function _addTaskFn (challenge, tasks, memberId) { let userTask = new Tasks[chalTask.type](Tasks.Task.sanitize(syncableAttrs(chalTask))); userTask.challenge = {taskId: chalTask._id, id: challenge._id}; userTask.userId = memberId; + userTask.notes = chalTask.notes; // We want to sync the notes when the task is first added to the challenge let tasksOrderList = updateTasksOrderQ.$push[`tasksOrder.${chalTask.type}s`]; if (!tasksOrderList) {