From d93cabafb950b0e2d2c1e548cfa45bcb322118ef Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Sat, 16 Jan 2016 14:06:16 -0600 Subject: [PATCH] Added initial tests for createChallengeTasks and fixed some issues in the challenge and challengeTask routes --- .../POST-tasks_challenge_id.test.js | 125 ++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 test/api/v3/integration/tasks/challenges/POST-tasks_challenge_id.test.js 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 new file mode 100644 index 0000000000..62899ffb59 --- /dev/null +++ b/test/api/v3/integration/tasks/challenges/POST-tasks_challenge_id.test.js @@ -0,0 +1,125 @@ +import { + generateUser, + generateGroup, + generateChallenge, + translate as t, +} from '../../../../../helpers/api-v3-integration.helper'; +import { v4 as generateUUID } from 'uuid'; + +describe('POST /tasks/challenge/:challengeId', () => { + let user; + let guild; + let challenge; + + beforeEach(async () => { + user = await generateUser({balance: 1}); + guild = await generateGroup(user); + challenge = await generateChallenge(user, guild); + }); + + it('returns error when challenge is not found', async () => { + let fakeChallengeId = generateUUID(); + + await expect(user.post(`/tasks/challenge/${fakeChallengeId}`, { + text: 'test habit', + type: 'habit', + up: false, + down: true, + notes: 1976, + })).to.eventually.be.rejected.and.eql({ + code: 404, + error: 'NotFound', + message: t('challengeNotFound'), + }); + }); + + it('returns error when user does not have the challenge', async () => { + let userWithoutChallenge = await generateUser(); + + await expect(userWithoutChallenge.post(`/tasks/challenge/${challenge._id}`, { + text: 'test habit', + type: 'habit', + up: false, + down: true, + notes: 1976, + })).to.eventually.be.rejected.and.eql({ + code: 404, + error: 'NotFound', + message: t('challengeNotFound'), + }); + }); + + it('returns error when non leader tries to edit challenge', async () => { + let userThatIsNotLeaderOfChallenge = await generateUser({ + challenges: [challenge._id], + }); + + await expect(userThatIsNotLeaderOfChallenge.post(`/tasks/challenge/${challenge._id}`, { + text: 'test habit', + type: 'habit', + up: false, + down: true, + notes: 1976, + })).to.eventually.be.rejected.and.eql({ + code: 401, + error: 'NotAuthorized', + message: t('onlyChalLeaderEditTasks'), + }); + }); + + it('creates a habit', async () => { + let task = await user.post(`/tasks/challenge/${challenge._id}`, { + text: 'test habit', + type: 'habit', + up: false, + down: true, + notes: 1976, + }); + let challengeWithTask = await user.get(`/challenges/${challenge._id}`); + + 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'); + expect(task.notes).to.eql('1976'); + expect(task.type).to.eql('habit'); + expect(task.up).to.eql(false); + expect(task.down).to.eql(true); + }); + + it('creates a todo', async () => { + let task = await user.post(`/tasks/challenge/${challenge._id}`, { + text: 'test todo', + type: 'todo', + notes: 1976, + }); + let challengeWithTask = await user.get(`/challenges/${challenge._id}`); + + 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'); + }); + + it('creates a daily', async () => { + let now = new Date(); + let task = await user.post(`/tasks/challenge/${challenge._id}`, { + text: 'test daily', + type: 'daily', + notes: 1976, + frequency: 'daily', + everyX: 5, + startDate: now, + }); + let challengeWithTask = await user.get(`/challenges/${challenge._id}`); + + 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'); + expect(task.notes).to.eql('1976'); + expect(task.type).to.eql('daily'); + expect(task.frequency).to.eql('daily'); + expect(task.everyX).to.eql(5); + expect(new Date(task.startDate)).to.eql(now); + }); +});