diff --git a/test/api/v3/integration/challenges/GET-challenges_challengeId_export_csv.test.js b/test/api/v3/integration/challenges/GET-challenges_challengeId_export_csv.test.js index cc7f408951..e4c1ceee34 100644 --- a/test/api/v3/integration/challenges/GET-challenges_challengeId_export_csv.test.js +++ b/test/api/v3/integration/challenges/GET-challenges_challengeId_export_csv.test.js @@ -34,7 +34,10 @@ describe('GET /challenges/:challengeId/export/csv', () => { {type: 'habit', text: 'Task 1'}, {type: 'todo', text: 'Task 2'}, ]); - await sleep(1); + await sleep(0.5); // Make sure tasks are synced to the users + await members[0].sync(); + await members[1].sync(); + await members[2].sync(); }); it('fails if challenge doesn\'t exists', async () => { @@ -54,6 +57,15 @@ describe('GET /challenges/:challengeId/export/csv', () => { }); it('should return a valid CSV file with export data', async () => { - await members[0].get(`/challenges/${challenge._id}/export/csv`); + let res = await members[0].get(`/challenges/${challenge._id}/export/csv`); + let sortedMembers = _.sortBy([members[0], members[1], members[2], groupLeader], '_id'); + let splitRes = res.split('\n'); + + expect(splitRes[0]).to.equal('UUID,name,Task,Value,Notes,Task,Value,Notes'); + expect(splitRes[1]).to.equal(`${sortedMembers[0]._id},${sortedMembers[0].profile.name},habit:Task 1,0,,todo:Task 2,0,`); + expect(splitRes[2]).to.equal(`${sortedMembers[1]._id},${sortedMembers[1].profile.name},habit:Task 1,0,,todo:Task 2,0,`); + expect(splitRes[3]).to.equal(`${sortedMembers[2]._id},${sortedMembers[2].profile.name},habit:Task 1,0,,todo:Task 2,0,`); + expect(splitRes[4]).to.equal(`${sortedMembers[3]._id},${sortedMembers[3].profile.name},habit:Task 1,0,,todo:Task 2,0,`); + expect(splitRes[5]).to.equal(''); }); }); diff --git a/test/helpers/api-integration/requester.js b/test/helpers/api-integration/requester.js index a55da4d3d8..de090f54aa 100644 --- a/test/helpers/api-integration/requester.js +++ b/test/helpers/api-integration/requester.js @@ -51,7 +51,8 @@ function _requestMaker (user, method, additionalSets) { reject(parsedError); } - resolve(response.body); + let contentType = response.headers['content-type'] || ''; + resolve(contentType.indexOf('json') !== -1 ? response.body : response.text); }); }); }; diff --git a/website/src/controllers/api-v3/challenges.js b/website/src/controllers/api-v3/challenges.js index 3169650a0d..e5d9fd4424 100644 --- a/website/src/controllers/api-v3/challenges.js +++ b/website/src/controllers/api-v3/challenges.js @@ -280,7 +280,7 @@ api.exportChallengeCsv = { .exec(), Tasks.Task.find({'challenge.id': challengeId, userId: {$exists: true}}) - .sort({userId: 1, _id: 1}).select('userId type text value notes').lean().exec(), + .sort({userId: 1, text: 1}).select('userId type text value notes').lean().exec(), ]); let resArray = members.map(member => [member._id, member.profile.name]);