tests(api): Add generateChallenge helper

This commit is contained in:
Blade Barringer
2016-01-17 13:58:46 -06:00
parent 81e6172fb1
commit 7b59455252
3 changed files with 35 additions and 52 deletions

View File

@@ -1,6 +1,7 @@
import { import {
generateUser, generateUser,
generateGroup, generateGroup,
generateChallenge,
translate as t, translate as t,
} from '../../../../helpers/api-v3-integration.helper'; } from '../../../../helpers/api-v3-integration.helper';
import { v4 as generateUUID } from 'uuid'; 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 () => { it('fails if user doesn\'t have access to the challenge', async () => {
let group = await generateGroup(user, {type: 'party', name: generateUUID()}); let group = await generateGroup(user);
let challenge = await user.post('/challenges', { let challenge = await generateChallenge(user, group);
name: 'test chal',
shortName: 'test-chal',
groupId: group._id,
});
let anotherUser = await generateUser(); let anotherUser = await generateUser();
await expect(anotherUser.get(`/challenges/${challenge._id}/members`)).to.eventually.be.rejected.and.eql({ await expect(anotherUser.get(`/challenges/${challenge._id}/members`)).to.eventually.be.rejected.and.eql({
code: 404, code: 404,
error: 'NotFound', error: 'NotFound',
@@ -46,11 +44,7 @@ describe('GET /challenges/:challengeId/members', () => {
it('works with challenges belonging to public guild', async () => { it('works with challenges belonging to public guild', async () => {
let leader = await generateUser({balance: 4}); let leader = await generateUser({balance: 4});
let group = await generateGroup(leader, {type: 'guild', privacy: 'public', name: generateUUID()}); let group = await generateGroup(leader, {type: 'guild', privacy: 'public', name: generateUUID()});
let challenge = await leader.post('/challenges', { let challenge = await generateChallenge(leader, group);
name: 'test chal',
shortName: 'test-chal',
groupId: group._id,
});
let res = await user.get(`/challenges/${challenge._id}/members`); let res = await user.get(`/challenges/${challenge._id}/members`);
expect(res[0]).to.eql({ expect(res[0]).to.eql({
_id: leader._id, _id: leader._id,
@@ -63,11 +57,7 @@ describe('GET /challenges/:challengeId/members', () => {
it('populates only some fields', async () => { it('populates only some fields', async () => {
let anotherUser = await generateUser({balance: 3}); let anotherUser = await generateUser({balance: 3});
let group = await generateGroup(anotherUser, {type: 'guild', privacy: 'public', name: generateUUID()}); let group = await generateGroup(anotherUser, {type: 'guild', privacy: 'public', name: generateUUID()});
let challenge = await anotherUser.post('/challenges', { let challenge = await generateChallenge(anotherUser, group);
name: 'test chal',
shortName: 'test-chal',
groupId: group._id,
});
let res = await user.get(`/challenges/${challenge._id}/members`); let res = await user.get(`/challenges/${challenge._id}/members`);
expect(res[0]).to.eql({ expect(res[0]).to.eql({
_id: anotherUser._id, _id: anotherUser._id,
@@ -79,11 +69,7 @@ describe('GET /challenges/:challengeId/members', () => {
it('returns only first 30 members', async () => { it('returns only first 30 members', async () => {
let group = await generateGroup(user, {type: 'party', name: generateUUID()}); let group = await generateGroup(user, {type: 'party', name: generateUUID()});
let challenge = await user.post('/challenges', { let challenge = await generateChallenge(user, group);
name: 'test chal',
shortName: 'test-chal',
groupId: group._id,
});
let usersToGenerate = []; let usersToGenerate = [];
for (let i = 0; i < 31; i++) { 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 () => { it('supports using req.query.lastId to get more members', async () => {
let group = await generateGroup(user, {type: 'party', name: generateUUID()}); let group = await generateGroup(user, {type: 'party', name: generateUUID()});
let challenge = await user.post('/challenges', { let challenge = await generateChallenge(user, group);
name: 'test chal',
shortName: 'test-chal',
groupId: group._id,
});
let usersToGenerate = []; let usersToGenerate = [];
for (let i = 0; i < 57; i++) { for (let i = 0; i < 57; i++) {

View File

@@ -1,5 +1,6 @@
import { import {
generateUser, generateUser,
generateChallenge,
generateGroup, generateGroup,
translate as t, translate as t,
} from '../../../../helpers/api-v3-integration.helper'; } 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 () => { it('fails if user doesn\'t have access to the challenge', async () => {
let group = await generateGroup(user, {type: 'party', name: generateUUID()}); let group = await generateGroup(user, {type: 'party', name: generateUUID()});
let challenge = await user.post('/challenges', { let challenge = await generateChallenge(user, group);
name: 'test chal',
shortName: 'test-chal',
groupId: group._id,
});
let anotherUser = await generateUser(); let anotherUser = await generateUser();
let member = await generateUser(); let member = await generateUser();
await expect(anotherUser.get(`/challenges/${challenge._id}/members/${member._id}`)).to.eventually.be.rejected.and.eql({ 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 () => { it('fails if member is not part of the challenge', async () => {
let group = await generateGroup(user, {type: 'party', name: generateUUID()}); let group = await generateGroup(user, {type: 'party', name: generateUUID()});
let challenge = await user.post('/challenges', { let challenge = await generateChallenge(user, group);
name: 'test chal',
shortName: 'test-chal',
groupId: group._id,
});
let member = await generateUser(); let member = await generateUser();
await expect(user.get(`/challenges/${challenge._id}/members/${member._id}`)).to.eventually.be.rejected.and.eql({ await expect(user.get(`/challenges/${challenge._id}/members/${member._id}`)).to.eventually.be.rejected.and.eql({
code: 404, code: 404,
@@ -80,11 +73,7 @@ describe('GET /challenges/:challengeId/members/:memberId', () => {
it('works with challenges belonging to a public guild', async () => { it('works with challenges belonging to a public guild', async () => {
let groupLeader = await generateUser({balance: 4}); let groupLeader = await generateUser({balance: 4});
let group = await generateGroup(groupLeader, {type: 'guild', privacy: 'public', name: generateUUID()}); let group = await generateGroup(groupLeader, {type: 'guild', privacy: 'public', name: generateUUID()});
let challenge = await groupLeader.post('/challenges', { let challenge = await generateChallenge(groupLeader, group);
name: 'test chal',
shortName: 'test-chal',
groupId: group._id,
});
let taskText = 'Test Text'; let taskText = 'Test Text';
await groupLeader.post(`/tasks/challenge/${challenge._id}`, [{type: 'habit', text: taskText}]); 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 () => { it('returns the member tasks for the challenges', async () => {
let group = await generateGroup(user, {type: 'party', name: generateUUID()}); let group = await generateGroup(user, {type: 'party', name: generateUUID()});
let challenge = await user.post('/challenges', { let challenge = await generateChallenge(user, group);
name: 'test chal',
shortName: 'test-chal',
groupId: group._id,
});
await user.post(`/tasks/challenge/${challenge._id}`, [{type: 'habit', text: 'Test Text'}]); await user.post(`/tasks/challenge/${challenge._id}`, [{type: 'habit', text: 'Test Text'}]);
let memberProgress = await user.get(`/challenges/${challenge._id}/members/${user._id}`); 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 () => { it('returns the tasks without the tags', async () => {
let group = await generateGroup(user, {type: 'party', name: generateUUID()}); let group = await generateGroup(user, {type: 'party', name: generateUUID()});
let challenge = await user.post('/challenges', { let challenge = await generateChallenge(user, group);
name: 'test chal',
shortName: 'test-chal',
groupId: group._id,
});
let taskText = 'Test Text'; let taskText = 'Test Text';
await user.post(`/tasks/challenge/${challenge._id}`, [{type: 'habit', text: taskText}]); await user.post(`/tasks/challenge/${challenge._id}`, [{type: 'habit', text: taskText}]);

View File

@@ -3,7 +3,7 @@ import {
} from 'lodash'; } from 'lodash';
import Q from 'q'; import Q from 'q';
import { v4 as generateUUID } from 'uuid'; import { v4 as generateUUID } from 'uuid';
import { ApiUser, ApiGroup } from '../api-classes'; import { ApiUser, ApiGroup, ApiChallenge } from '../api-classes';
import { requester } from '../requester'; import { requester } from '../requester';
// Creates a new user and returns it // Creates a new user and returns it
@@ -106,3 +106,23 @@ export async function createAndPopulateGroup (settings = {}) {
invitees, 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;
}