From 4fe6c8db6427c41c7341c34850dc189b479975f8 Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Tue, 30 Jan 2018 08:23:20 -0700 Subject: [PATCH] Clone challenges api (#9684) * Added clone api * Added new clone UI * Fixed challenge clone * Fixed lint and added mongo toObject * Removed clone field, fixed type, fixed challenge task query * Auto selected group * Accounted for group balance when creating challenge * Added check for if user is leader of guild * Added leader existence check * Added fix for leader and prizecost equal to --- .../POST_challenges_id_clone.test.js | 43 ++++ .../components/challenges/challengeDetail.vue | 37 +--- .../components/challenges/challengeModal.vue | 55 ++++- website/client/store/actions/challenges.js | 7 + .../server/controllers/api-v3/challenges.js | 206 ++++++++++++------ 5 files changed, 244 insertions(+), 104 deletions(-) create mode 100644 test/api/v3/integration/challenges/POST_challenges_id_clone.test.js diff --git a/test/api/v3/integration/challenges/POST_challenges_id_clone.test.js b/test/api/v3/integration/challenges/POST_challenges_id_clone.test.js new file mode 100644 index 0000000000..04e12049cd --- /dev/null +++ b/test/api/v3/integration/challenges/POST_challenges_id_clone.test.js @@ -0,0 +1,43 @@ +import { + generateUser, + generateGroup, +} from '../../../../helpers/api-v3-integration.helper'; + +describe('POST /challenges/:challengeId/clone', () => { + it('clones a challenge', async () => { + const user = await generateUser({balance: 10}); + const group = await generateGroup(user); + + const name = 'Test Challenge'; + const shortName = 'TC Label'; + const description = 'Test Description'; + const prize = 1; + + const challenge = await user.post('/challenges', { + group: group._id, + name, + shortName, + description, + prize, + }); + const challengeTask = await user.post(`/tasks/challenge/${challenge._id}`, { + text: 'test habit', + type: 'habit', + up: false, + down: true, + notes: 1976, + }); + + const cloneChallengeResponse = await user.post(`/challenges/${challenge._id}/clone`, { + group: group._id, + name: `${name} cloned`, + shortName, + description, + prize, + }); + + expect(cloneChallengeResponse.clonedTasks[0].text).to.eql(challengeTask.text); + expect(cloneChallengeResponse.clonedTasks[0]._id).to.not.eql(challengeTask._id); + expect(cloneChallengeResponse.clonedTasks[0].challenge.id).to.eql(cloneChallengeResponse.clonedChallenge._id); + }); +}); diff --git a/website/client/components/challenges/challengeDetail.vue b/website/client/components/challenges/challengeDetail.vue index 01f07bcb6d..efa05268ae 100644 --- a/website/client/components/challenges/challengeDetail.vue +++ b/website/client/components/challenges/challengeDetail.vue @@ -1,6 +1,6 @@