diff --git a/test/api/v3/integration/tasks/GET-tasks_user.test.js b/test/api/v3/integration/tasks/GET-tasks_user.test.js index 38b373d76e..406c0d43fb 100644 --- a/test/api/v3/integration/tasks/GET-tasks_user.test.js +++ b/test/api/v3/integration/tasks/GET-tasks_user.test.js @@ -16,13 +16,55 @@ describe('GET /tasks/user', () => { }); it('returns only a type of user\'s tasks if req.query.type is specified', async () => { - let createdTasks = await user.post('/tasks/user', [{text: 'test habit', type: 'habit'}, {text: 'test todo', type: 'todo'}]); - let tasks = await user.get('/tasks/user?type=habits'); - expect(tasks.length).to.equal(1); - expect(tasks[0]._id).to.equal(createdTasks[0]._id); + let createdTasks = await user.post('/tasks/user', [ + {text: 'test habit', type: 'habit'}, + {text: 'test daily', type: 'daily'}, + {text: 'test reward', type: 'reward'}, + {text: 'test todo', type: 'todo'}, + ]); + let habits = await user.get('/tasks/user?type=habits'); + let dailys = await user.get('/tasks/user?type=dailys'); + let rewards = await user.get('/tasks/user?type=rewards'); + + expect(habits.length).to.be.at.least(1); + expect(habits[0]._id).to.equal(createdTasks[0]._id); + expect(dailys.length).to.be.at.least(1); + expect(dailys[0]._id).to.equal(createdTasks[1]._id); + expect(rewards.length).to.be.at.least(1); + expect(rewards[0]._id).to.equal(createdTasks[2]._id); }); - it('returns completed todos sorted by reverse completion date if req.query.type === "completeTodos"', async () => { + it('returns uncompleted todos if req.query.type is "todos"', async () => { + let existingTodos = await user.get('/tasks/user?type=todos'); + + // populate user with other task types + await user.post('/tasks/user', [ + {text: 'daily', type: 'daily'}, + {text: 'reward', type: 'reward'}, + {text: 'habit', type: 'habit'}, + ]); + + let newUncompletedTodos = await user.post('/tasks/user', [ + {text: 'test todo 1', type: 'todo'}, + {text: 'test todo 2', type: 'todo'}, + ]); + let todoToBeCompleted = await user.post('/tasks/user', { + text: 'wll be completed todo', type: 'todo', + }); + + await user.post(`/tasks/${todoToBeCompleted._id}/score/up`); + + let uncompletedTodos = [...existingTodos, ...newUncompletedTodos]; + + let todos = await user.get('/tasks/user?type=todos'); + + expect(todos.length).to.be.gte(2); + expect(todos.length).to.eql(uncompletedTodos.length); + expect(todos.every(task => task.type === 'todo')); + expect(todos.every(task => task.completed === false)); + }); + + it('returns completed todos sorted by reverse completion date if req.query.type is "completeTodos"', async () => { let todo1 = await user.post('/tasks/user', {text: 'todo to complete 1', type: 'todo'}); let todo2 = await user.post('/tasks/user', {text: 'todo to complete 2', type: 'todo'}); diff --git a/website/server/controllers/api-v3/tasks.js b/website/server/controllers/api-v3/tasks.js index 80f198cbf9..aa7fc9b939 100644 --- a/website/server/controllers/api-v3/tasks.js +++ b/website/server/controllers/api-v3/tasks.js @@ -121,6 +121,7 @@ async function _getTasks (req, res, user, challenge) { if (type) { if (type === 'todos') { query.completed = false; // Exclude completed todos + query.type = 'todo'; } else if (type === 'completedTodos') { query = Tasks.Task.find({ userId: user._id,