mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-15 13:47:33 +01:00
252 lines
7.0 KiB
JavaScript
252 lines
7.0 KiB
JavaScript
import {
|
|
generateUser,
|
|
createAndPopulateGroup,
|
|
generateChallenge,
|
|
translate as t,
|
|
} from '../../../../helpers/api-integration/v3';
|
|
import { v4 as generateUUID } from 'uuid';
|
|
|
|
describe('GET /challenges/:challengeId', () => {
|
|
it('fails if challenge doesn\'t exists', async () => {
|
|
let user = await generateUser();
|
|
await expect(user.get(`/challenges/${generateUUID()}`)).to.eventually.be.rejected.and.eql({
|
|
code: 404,
|
|
error: 'NotFound',
|
|
message: t('challengeNotFound'),
|
|
});
|
|
});
|
|
|
|
context('public guild', () => {
|
|
let groupLeader;
|
|
let group;
|
|
let challenge;
|
|
let user;
|
|
|
|
beforeEach(async () => {
|
|
user = await generateUser();
|
|
|
|
let populatedGroup = await createAndPopulateGroup({
|
|
groupDetails: {type: 'guild', privacy: 'public'},
|
|
});
|
|
|
|
groupLeader = populatedGroup.groupLeader;
|
|
group = populatedGroup.group;
|
|
|
|
challenge = await generateChallenge(groupLeader, group);
|
|
await groupLeader.post(`/challenges/${challenge._id}/join`);
|
|
});
|
|
|
|
it('should return challenge data', async () => {
|
|
await challenge.sync();
|
|
let chal = await user.get(`/challenges/${challenge._id}`);
|
|
expect(chal.memberCount).to.equal(challenge.memberCount);
|
|
expect(chal.name).to.equal(challenge.name);
|
|
expect(chal._id).to.equal(challenge._id);
|
|
|
|
expect(chal.leader).to.eql({
|
|
_id: groupLeader._id,
|
|
id: groupLeader._id,
|
|
profile: {name: groupLeader.profile.name},
|
|
auth: {
|
|
local: {
|
|
username: groupLeader.auth.local.username,
|
|
},
|
|
},
|
|
flags: {
|
|
verifiedUsername: true,
|
|
},
|
|
});
|
|
expect(chal.group).to.eql({
|
|
_id: group._id,
|
|
categories: [],
|
|
id: group.id,
|
|
name: group.name,
|
|
summary: group.name,
|
|
type: group.type,
|
|
privacy: group.privacy,
|
|
leader: groupLeader.id,
|
|
});
|
|
});
|
|
});
|
|
|
|
context('private guild', () => {
|
|
let groupLeader;
|
|
let challengeLeader;
|
|
let group;
|
|
let challenge;
|
|
let members;
|
|
let nonMember;
|
|
let otherMember;
|
|
|
|
beforeEach(async () => {
|
|
nonMember = await generateUser();
|
|
|
|
let populatedGroup = await createAndPopulateGroup({
|
|
groupDetails: {type: 'guild', privacy: 'private'},
|
|
members: 2,
|
|
});
|
|
|
|
groupLeader = populatedGroup.groupLeader;
|
|
group = populatedGroup.group;
|
|
members = populatedGroup.members;
|
|
|
|
challengeLeader = members[0];
|
|
otherMember = members[1];
|
|
|
|
challenge = await generateChallenge(challengeLeader, group);
|
|
});
|
|
|
|
it('fails if user isn\'t in the guild and isn\'t challenge leader', async () => {
|
|
await expect(nonMember.get(`/challenges/${challenge._id}`)).to.eventually.be.rejected.and.eql({
|
|
code: 404,
|
|
error: 'NotFound',
|
|
message: t('challengeNotFound'),
|
|
});
|
|
});
|
|
|
|
it('returns challenge data for any user in the guild', async () => {
|
|
let chal = await otherMember.get(`/challenges/${challenge._id}`);
|
|
expect(chal.name).to.equal(challenge.name);
|
|
expect(chal._id).to.equal(challenge._id);
|
|
|
|
expect(chal.leader).to.eql({
|
|
_id: challengeLeader._id,
|
|
id: challengeLeader._id,
|
|
profile: {name: challengeLeader.profile.name},
|
|
auth: {
|
|
local: {
|
|
username: challengeLeader.auth.local.username,
|
|
},
|
|
},
|
|
flags: {
|
|
verifiedUsername: true,
|
|
},
|
|
});
|
|
expect(chal.group).to.eql({
|
|
_id: group._id,
|
|
categories: [],
|
|
id: group.id,
|
|
name: group.name,
|
|
summary: group.name,
|
|
type: group.type,
|
|
privacy: group.privacy,
|
|
leader: groupLeader.id,
|
|
});
|
|
});
|
|
|
|
it('returns challenge data if challenge leader isn\'t in the guild or challenge', async () => {
|
|
await challengeLeader.post(`/groups/${group._id}/leave`);
|
|
await challengeLeader.sync();
|
|
expect(challengeLeader.guilds).to.be.empty; // check that leaving worked
|
|
|
|
let chal = await challengeLeader.get(`/challenges/${challenge._id}`);
|
|
expect(chal.name).to.equal(challenge.name);
|
|
expect(chal._id).to.equal(challenge._id);
|
|
|
|
expect(chal.leader).to.eql({
|
|
_id: challengeLeader._id,
|
|
id: challengeLeader._id,
|
|
profile: {name: challengeLeader.profile.name},
|
|
auth: {
|
|
local: {
|
|
username: challengeLeader.auth.local.username,
|
|
},
|
|
},
|
|
flags: {
|
|
verifiedUsername: true,
|
|
},
|
|
});
|
|
});
|
|
});
|
|
|
|
context('party', () => {
|
|
let groupLeader;
|
|
let challengeLeader;
|
|
let group;
|
|
let challenge;
|
|
let members;
|
|
let nonMember;
|
|
let otherMember;
|
|
|
|
beforeEach(async () => {
|
|
nonMember = await generateUser();
|
|
|
|
let populatedGroup = await createAndPopulateGroup({
|
|
groupDetails: {type: 'party', privacy: 'private'},
|
|
members: 2,
|
|
});
|
|
|
|
groupLeader = populatedGroup.groupLeader;
|
|
group = populatedGroup.group;
|
|
members = populatedGroup.members;
|
|
|
|
challengeLeader = members[0];
|
|
otherMember = members[1];
|
|
|
|
challenge = await generateChallenge(challengeLeader, group);
|
|
});
|
|
|
|
it('fails if user isn\'t in the party and isn\'t challenge leader', async () => {
|
|
await expect(nonMember.get(`/challenges/${challenge._id}`)).to.eventually.be.rejected.and.eql({
|
|
code: 404,
|
|
error: 'NotFound',
|
|
message: t('challengeNotFound'),
|
|
});
|
|
});
|
|
|
|
it('returns challenge data for any user in the party', async () => {
|
|
let chal = await otherMember.get(`/challenges/${challenge._id}`);
|
|
expect(chal.name).to.equal(challenge.name);
|
|
expect(chal._id).to.equal(challenge._id);
|
|
|
|
expect(chal.leader).to.eql({
|
|
_id: challengeLeader._id,
|
|
id: challengeLeader._id,
|
|
profile: {name: challengeLeader.profile.name},
|
|
auth: {
|
|
local: {
|
|
username: challengeLeader.auth.local.username,
|
|
},
|
|
},
|
|
flags: {
|
|
verifiedUsername: true,
|
|
},
|
|
});
|
|
expect(chal.group).to.eql({
|
|
_id: group._id,
|
|
id: group._id,
|
|
categories: [],
|
|
name: group.name,
|
|
summary: group.name,
|
|
type: group.type,
|
|
privacy: group.privacy,
|
|
leader: groupLeader.id,
|
|
});
|
|
});
|
|
|
|
it('returns challenge data if challenge leader isn\'t in the party or challenge', async () => {
|
|
await challengeLeader.post('/groups/party/leave');
|
|
await challengeLeader.sync();
|
|
expect(challengeLeader.party._id).to.be.undefined; // check that leaving worked
|
|
|
|
let chal = await challengeLeader.get(`/challenges/${challenge._id}`);
|
|
expect(chal.name).to.equal(challenge.name);
|
|
expect(chal._id).to.equal(challenge._id);
|
|
|
|
expect(chal.leader).to.eql({
|
|
_id: challengeLeader._id,
|
|
id: challengeLeader._id,
|
|
profile: {name: challengeLeader.profile.name},
|
|
auth: {
|
|
local: {
|
|
username: challengeLeader.auth.local.username,
|
|
},
|
|
},
|
|
flags: {
|
|
verifiedUsername: true,
|
|
},
|
|
});
|
|
});
|
|
});
|
|
});
|