From 7b5945525280479e6ec741d1928a326b7bdf5d45 Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Sun, 17 Jan 2016 13:58:46 -0600 Subject: [PATCH] tests(api): Add generateChallenge helper --- ...GET-challenges_challengeId_members.test.js | 34 +++++-------------- ...enges_challengeId_members_memberId.test.js | 31 ++++------------- .../api-integration/v3/object-generators.js | 22 +++++++++++- 3 files changed, 35 insertions(+), 52 deletions(-) diff --git a/test/api/v3/integration/challenges/GET-challenges_challengeId_members.test.js b/test/api/v3/integration/challenges/GET-challenges_challengeId_members.test.js index 318181b66e..ae037b53e4 100644 --- a/test/api/v3/integration/challenges/GET-challenges_challengeId_members.test.js +++ b/test/api/v3/integration/challenges/GET-challenges_challengeId_members.test.js @@ -1,6 +1,7 @@ import { generateUser, generateGroup, + generateChallenge, translate as t, } from '../../../../helpers/api-v3-integration.helper'; import { v4 as generateUUID } from 'uuid'; @@ -29,13 +30,10 @@ describe('GET /challenges/:challengeId/members', () => { }); it('fails if user doesn\'t have access to the challenge', async () => { - let group = await generateGroup(user, {type: 'party', name: generateUUID()}); - let challenge = await user.post('/challenges', { - name: 'test chal', - shortName: 'test-chal', - groupId: group._id, - }); + let group = await generateGroup(user); + let challenge = await generateChallenge(user, group); let anotherUser = await generateUser(); + await expect(anotherUser.get(`/challenges/${challenge._id}/members`)).to.eventually.be.rejected.and.eql({ code: 404, error: 'NotFound', @@ -46,11 +44,7 @@ describe('GET /challenges/:challengeId/members', () => { it('works with challenges belonging to public guild', async () => { let leader = await generateUser({balance: 4}); let group = await generateGroup(leader, {type: 'guild', privacy: 'public', name: generateUUID()}); - let challenge = await leader.post('/challenges', { - name: 'test chal', - shortName: 'test-chal', - groupId: group._id, - }); + let challenge = await generateChallenge(leader, group); let res = await user.get(`/challenges/${challenge._id}/members`); expect(res[0]).to.eql({ _id: leader._id, @@ -63,11 +57,7 @@ describe('GET /challenges/:challengeId/members', () => { it('populates only some fields', async () => { let anotherUser = await generateUser({balance: 3}); let group = await generateGroup(anotherUser, {type: 'guild', privacy: 'public', name: generateUUID()}); - let challenge = await anotherUser.post('/challenges', { - name: 'test chal', - shortName: 'test-chal', - groupId: group._id, - }); + let challenge = await generateChallenge(anotherUser, group); let res = await user.get(`/challenges/${challenge._id}/members`); expect(res[0]).to.eql({ _id: anotherUser._id, @@ -79,11 +69,7 @@ describe('GET /challenges/:challengeId/members', () => { it('returns only first 30 members', async () => { let group = await generateGroup(user, {type: 'party', name: generateUUID()}); - let challenge = await user.post('/challenges', { - name: 'test chal', - shortName: 'test-chal', - groupId: group._id, - }); + let challenge = await generateChallenge(user, group); let usersToGenerate = []; for (let i = 0; i < 31; i++) { @@ -101,11 +87,7 @@ describe('GET /challenges/:challengeId/members', () => { it('supports using req.query.lastId to get more members', async () => { let group = await generateGroup(user, {type: 'party', name: generateUUID()}); - let challenge = await user.post('/challenges', { - name: 'test chal', - shortName: 'test-chal', - groupId: group._id, - }); + let challenge = await generateChallenge(user, group); let usersToGenerate = []; for (let i = 0; i < 57; i++) { diff --git a/test/api/v3/integration/challenges/GET-challenges_challengeId_members_memberId.test.js b/test/api/v3/integration/challenges/GET-challenges_challengeId_members_memberId.test.js index e91fef8563..315d7bef2c 100644 --- a/test/api/v3/integration/challenges/GET-challenges_challengeId_members_memberId.test.js +++ b/test/api/v3/integration/challenges/GET-challenges_challengeId_members_memberId.test.js @@ -1,5 +1,6 @@ import { generateUser, + generateChallenge, generateGroup, translate as t, } from '../../../../helpers/api-v3-integration.helper'; @@ -48,11 +49,7 @@ describe('GET /challenges/:challengeId/members/:memberId', () => { it('fails if user doesn\'t have access to the challenge', async () => { let group = await generateGroup(user, {type: 'party', name: generateUUID()}); - let challenge = await user.post('/challenges', { - name: 'test chal', - shortName: 'test-chal', - groupId: group._id, - }); + let challenge = await generateChallenge(user, group); let anotherUser = await generateUser(); let member = await generateUser(); await expect(anotherUser.get(`/challenges/${challenge._id}/members/${member._id}`)).to.eventually.be.rejected.and.eql({ @@ -64,11 +61,7 @@ describe('GET /challenges/:challengeId/members/:memberId', () => { it('fails if member is not part of the challenge', async () => { let group = await generateGroup(user, {type: 'party', name: generateUUID()}); - let challenge = await user.post('/challenges', { - name: 'test chal', - shortName: 'test-chal', - groupId: group._id, - }); + let challenge = await generateChallenge(user, group); let member = await generateUser(); await expect(user.get(`/challenges/${challenge._id}/members/${member._id}`)).to.eventually.be.rejected.and.eql({ code: 404, @@ -80,11 +73,7 @@ describe('GET /challenges/:challengeId/members/:memberId', () => { it('works with challenges belonging to a public guild', async () => { let groupLeader = await generateUser({balance: 4}); let group = await generateGroup(groupLeader, {type: 'guild', privacy: 'public', name: generateUUID()}); - let challenge = await groupLeader.post('/challenges', { - name: 'test chal', - shortName: 'test-chal', - groupId: group._id, - }); + let challenge = await generateChallenge(groupLeader, group); let taskText = 'Test Text'; await groupLeader.post(`/tasks/challenge/${challenge._id}`, [{type: 'habit', text: taskText}]); @@ -96,11 +85,7 @@ describe('GET /challenges/:challengeId/members/:memberId', () => { it('returns the member tasks for the challenges', async () => { let group = await generateGroup(user, {type: 'party', name: generateUUID()}); - let challenge = await user.post('/challenges', { - name: 'test chal', - shortName: 'test-chal', - groupId: group._id, - }); + let challenge = await generateChallenge(user, group); await user.post(`/tasks/challenge/${challenge._id}`, [{type: 'habit', text: 'Test Text'}]); let memberProgress = await user.get(`/challenges/${challenge._id}/members/${user._id}`); @@ -112,11 +97,7 @@ describe('GET /challenges/:challengeId/members/:memberId', () => { it('returns the tasks without the tags', async () => { let group = await generateGroup(user, {type: 'party', name: generateUUID()}); - let challenge = await user.post('/challenges', { - name: 'test chal', - shortName: 'test-chal', - groupId: group._id, - }); + let challenge = await generateChallenge(user, group); let taskText = 'Test Text'; await user.post(`/tasks/challenge/${challenge._id}`, [{type: 'habit', text: taskText}]); diff --git a/test/helpers/api-integration/v3/object-generators.js b/test/helpers/api-integration/v3/object-generators.js index 1758998788..b7785e664f 100644 --- a/test/helpers/api-integration/v3/object-generators.js +++ b/test/helpers/api-integration/v3/object-generators.js @@ -3,7 +3,7 @@ import { } from 'lodash'; import Q from 'q'; import { v4 as generateUUID } from 'uuid'; -import { ApiUser, ApiGroup } from '../api-classes'; +import { ApiUser, ApiGroup, ApiChallenge } from '../api-classes'; import { requester } from '../requester'; // Creates a new user and returns it @@ -106,3 +106,23 @@ export async function createAndPopulateGroup (settings = {}) { invitees, }; } + +// Generates a new challenge. Requires an ApiUser object and a +// group-like object (can just be {_id: 'your-group-id'}). The group +// will will become the group that owns the challenge. It takes an +// optional details argument for the initial challenge creation and an +// optional update argument which will update the challenge via the db +export async function generateChallenge (challengeCreator, group, details = {}, update = {}) { + details.groupId = group._id; + details.name = details.name || 'a challenge'; + details.shortName = details.shortName || 'aChallenge'; + details.prize = details.prize || 0; + details.official = details.official || false; + + let challenge = await challengeCreator.post('/challenges', details); + let apiChallenge = new ApiChallenge(challenge); + + await apiChallenge.update(update); + + return apiChallenge; +}