From 22e64bb88ecc3b0627cac3953d024b52727194dc Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Tue, 8 Mar 2016 12:42:05 -0600 Subject: [PATCH 1/2] Added initial get challenge task by id --- .../tasks/challenges/GET-tasks_id.test.js | 66 +++++++++++++++++++ website/src/controllers/api-v3/tasks.js | 2 +- 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 test/api/v3/integration/tasks/challenges/GET-tasks_id.test.js diff --git a/test/api/v3/integration/tasks/challenges/GET-tasks_id.test.js b/test/api/v3/integration/tasks/challenges/GET-tasks_id.test.js new file mode 100644 index 0000000000..49bf79c120 --- /dev/null +++ b/test/api/v3/integration/tasks/challenges/GET-tasks_id.test.js @@ -0,0 +1,66 @@ +import { + generateUser, + generateGroup, + generateChallenge, + translate as t, +} from '../../../../../helpers/api-integration/v3'; +import { each } from 'lodash'; + +describe('GET /tasks/:taskId', () => { + let user; + let guild; + let challenge; + let 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', + }, + }; + + before(async () => { + user = await generateUser(); + guild = await generateGroup(user); + challenge = await generateChallenge(user, guild); + }); + + each(tasksToTest, (taskValue, taskType) => { + context(`${taskType}`, () => { + before(async () => { + task = await user.post(`/tasks/challenge/${challenge._id}`, taskValue); + }); + + it('gets challenge task', async () => { + let getTask = await user.get(`/tasks/${task._id}`); + expect(getTask).to.eql(task); + }); + + it('returns error when user is not a member of the challenge', async () => { + let anotherUser = await generateUser(); + + await expect(anotherUser.get(`/tasks/${task._id}`)).to.eventually.be.rejected.and.eql({ + code: 404, + error: 'NotFound', + message: t('taskNotFound'), + }); + }); + }); + }); +}); diff --git a/website/src/controllers/api-v3/tasks.js b/website/src/controllers/api-v3/tasks.js index cfab73241c..2eb3c91063 100644 --- a/website/src/controllers/api-v3/tasks.js +++ b/website/src/controllers/api-v3/tasks.js @@ -257,7 +257,7 @@ api.getTask = { if (!task) { throw new NotFound(res.t('taskNotFound')); } else if (!task.userId) { // If the task belongs to a challenge make sure the user has rights - let challenge = await Challenge.find().selec({_id: task.challenge.id}).select('leader').exec(); + let challenge = await Challenge.find({_id: task.challenge.id}).select('leader').exec(); if (!challenge || (user.challenges.indexOf(task.challenge.id) === -1 && challenge.leader !== user._id && !user.contributor.admin)) { // eslint-disable-line no-extra-parens throw new NotFound(res.t('taskNotFound')); } From f96de74abd4b0fd846991e59d8383425b909b00b Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Wed, 9 Mar 2016 10:01:16 -0600 Subject: [PATCH 2/2] Added test for incorrect task and id and renamed test file --- ...est.js => GET-tasks_challenge_challengeId.test.js} | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) rename test/api/v3/integration/tasks/{challenges/GET-tasks_id.test.js => GET-tasks_challenge_challengeId.test.js} (81%) diff --git a/test/api/v3/integration/tasks/challenges/GET-tasks_id.test.js b/test/api/v3/integration/tasks/GET-tasks_challenge_challengeId.test.js similarity index 81% rename from test/api/v3/integration/tasks/challenges/GET-tasks_id.test.js rename to test/api/v3/integration/tasks/GET-tasks_challenge_challengeId.test.js index 49bf79c120..3fed4cfaed 100644 --- a/test/api/v3/integration/tasks/challenges/GET-tasks_id.test.js +++ b/test/api/v3/integration/tasks/GET-tasks_challenge_challengeId.test.js @@ -3,8 +3,9 @@ import { generateGroup, generateChallenge, translate as t, -} from '../../../../../helpers/api-integration/v3'; +} from '../../../../helpers/api-integration/v3'; import { each } from 'lodash'; +import { v4 as generateUUID } from 'uuid'; describe('GET /tasks/:taskId', () => { let user; @@ -41,6 +42,14 @@ describe('GET /tasks/:taskId', () => { challenge = await generateChallenge(user, guild); }); + it('returns error when incorrect id is passed', async () => { + await expect(user.get(`/tasks/${generateUUID()}`)).to.eventually.be.rejected.and.eql({ + code: 404, + error: 'NotFound', + message: t('taskNotFound'), + }); + }); + each(tasksToTest, (taskValue, taskType) => { context(`${taskType}`, () => { before(async () => {