mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-16 14:17:22 +01:00
fix(tests): update Challenges block for sunset
This commit is contained in:
@@ -16,60 +16,7 @@ describe('GET /challenges/:challengeId', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
context('public guild', () => {
|
context('Group Plan', () => {
|
||||||
let groupLeader;
|
|
||||||
let group;
|
|
||||||
let challenge;
|
|
||||||
let user;
|
|
||||||
|
|
||||||
beforeEach(async () => {
|
|
||||||
user = await generateUser();
|
|
||||||
|
|
||||||
const 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();
|
|
||||||
const 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 groupLeader;
|
||||||
let challengeLeader;
|
let challengeLeader;
|
||||||
let group;
|
let group;
|
||||||
@@ -84,6 +31,7 @@ describe('GET /challenges/:challengeId', () => {
|
|||||||
const populatedGroup = await createAndPopulateGroup({
|
const populatedGroup = await createAndPopulateGroup({
|
||||||
groupDetails: { type: 'guild', privacy: 'private' },
|
groupDetails: { type: 'guild', privacy: 'private' },
|
||||||
members: 2,
|
members: 2,
|
||||||
|
upgradeToGroupPlan: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
groupLeader = populatedGroup.groupLeader;
|
groupLeader = populatedGroup.groupLeader;
|
||||||
|
|||||||
@@ -71,32 +71,9 @@ describe('GET /challenges/:challengeId/members', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('works with challenges belonging to public guild', async () => {
|
|
||||||
const leader = await generateUser({ balance: 4 });
|
|
||||||
const group = await generateGroup(leader, { type: 'guild', privacy: 'public', name: generateUUID() });
|
|
||||||
const challenge = await generateChallenge(leader, group);
|
|
||||||
await leader.post(`/challenges/${challenge._id}/join`);
|
|
||||||
const res = await user.get(`/challenges/${challenge._id}/members`);
|
|
||||||
expect(res[0]).to.eql({
|
|
||||||
_id: leader._id,
|
|
||||||
id: leader._id,
|
|
||||||
profile: { name: leader.profile.name },
|
|
||||||
auth: {
|
|
||||||
local: {
|
|
||||||
username: leader.auth.local.username,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
flags: {
|
|
||||||
verifiedUsername: true,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
expect(res[0]).to.have.all.keys(['_id', 'auth', 'flags', 'id', 'profile']);
|
|
||||||
expect(res[0].profile).to.have.all.keys(['name']);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('populates only some fields', async () => {
|
it('populates only some fields', async () => {
|
||||||
const anotherUser = await generateUser({ balance: 3 });
|
const anotherUser = await generateUser({ balance: 3 });
|
||||||
const group = await generateGroup(anotherUser, { type: 'guild', privacy: 'public', name: generateUUID() });
|
const group = await generateGroup(anotherUser, { type: 'party', privacy: 'private', name: generateUUID() });
|
||||||
const challenge = await generateChallenge(anotherUser, group);
|
const challenge = await generateChallenge(anotherUser, group);
|
||||||
await anotherUser.post(`/challenges/${challenge._id}/join`);
|
await anotherUser.post(`/challenges/${challenge._id}/join`);
|
||||||
const res = await user.get(`/challenges/${challenge._id}/members`);
|
const res = await user.get(`/challenges/${challenge._id}/members`);
|
||||||
|
|||||||
@@ -7,117 +7,7 @@ import {
|
|||||||
import { TAVERN_ID } from '../../../../../website/common/script/constants';
|
import { TAVERN_ID } from '../../../../../website/common/script/constants';
|
||||||
|
|
||||||
describe('GET challenges/groups/:groupId', () => {
|
describe('GET challenges/groups/:groupId', () => {
|
||||||
context('Public Guild', () => {
|
context('Group Plan', () => {
|
||||||
let publicGuild; let user; let nonMember; let challenge; let
|
|
||||||
challenge2;
|
|
||||||
|
|
||||||
before(async () => {
|
|
||||||
const { group, groupLeader } = await createAndPopulateGroup({
|
|
||||||
groupDetails: {
|
|
||||||
name: 'TestGuild',
|
|
||||||
type: 'guild',
|
|
||||||
privacy: 'public',
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
publicGuild = group;
|
|
||||||
user = groupLeader;
|
|
||||||
|
|
||||||
nonMember = await generateUser();
|
|
||||||
|
|
||||||
challenge = await generateChallenge(user, group);
|
|
||||||
await user.post(`/challenges/${challenge._id}/join`);
|
|
||||||
challenge2 = await generateChallenge(user, group);
|
|
||||||
await user.post(`/challenges/${challenge2._id}/join`);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should return group challenges for non member with populated leader', async () => {
|
|
||||||
const challenges = await nonMember.get(`/challenges/groups/${publicGuild._id}`);
|
|
||||||
|
|
||||||
const foundChallenge1 = _.find(challenges, { _id: challenge._id });
|
|
||||||
expect(foundChallenge1).to.exist;
|
|
||||||
expect(foundChallenge1.leader).to.eql({
|
|
||||||
_id: publicGuild.leader._id,
|
|
||||||
id: publicGuild.leader._id,
|
|
||||||
profile: { name: user.profile.name },
|
|
||||||
auth: {
|
|
||||||
local: {
|
|
||||||
username: user.auth.local.username,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
flags: {
|
|
||||||
verifiedUsername: true,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
const foundChallenge2 = _.find(challenges, { _id: challenge2._id });
|
|
||||||
expect(foundChallenge2).to.exist;
|
|
||||||
expect(foundChallenge2.leader).to.eql({
|
|
||||||
_id: publicGuild.leader._id,
|
|
||||||
id: publicGuild.leader._id,
|
|
||||||
profile: { name: user.profile.name },
|
|
||||||
auth: {
|
|
||||||
local: {
|
|
||||||
username: user.auth.local.username,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
flags: {
|
|
||||||
verifiedUsername: true,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should return group challenges for member with populated leader', async () => {
|
|
||||||
const challenges = await user.get(`/challenges/groups/${publicGuild._id}`);
|
|
||||||
|
|
||||||
const foundChallenge1 = _.find(challenges, { _id: challenge._id });
|
|
||||||
expect(foundChallenge1).to.exist;
|
|
||||||
expect(foundChallenge1.leader).to.eql({
|
|
||||||
_id: publicGuild.leader._id,
|
|
||||||
id: publicGuild.leader._id,
|
|
||||||
profile: { name: user.profile.name },
|
|
||||||
auth: {
|
|
||||||
local: {
|
|
||||||
username: user.auth.local.username,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
flags: {
|
|
||||||
verifiedUsername: true,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
const foundChallenge2 = _.find(challenges, { _id: challenge2._id });
|
|
||||||
expect(foundChallenge2).to.exist;
|
|
||||||
expect(foundChallenge2.leader).to.eql({
|
|
||||||
_id: publicGuild.leader._id,
|
|
||||||
id: publicGuild.leader._id,
|
|
||||||
profile: { name: user.profile.name },
|
|
||||||
auth: {
|
|
||||||
local: {
|
|
||||||
username: user.auth.local.username,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
flags: {
|
|
||||||
verifiedUsername: true,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should return newest challenges first', async () => {
|
|
||||||
let challenges = await user.get(`/challenges/groups/${publicGuild._id}`);
|
|
||||||
|
|
||||||
let foundChallengeIndex = _.findIndex(challenges, { _id: challenge2._id });
|
|
||||||
expect(foundChallengeIndex).to.eql(0);
|
|
||||||
|
|
||||||
const newChallenge = await generateChallenge(user, publicGuild);
|
|
||||||
await user.post(`/challenges/${newChallenge._id}/join`);
|
|
||||||
|
|
||||||
challenges = await user.get(`/challenges/groups/${publicGuild._id}`);
|
|
||||||
|
|
||||||
foundChallengeIndex = _.findIndex(challenges, { _id: newChallenge._id });
|
|
||||||
expect(foundChallengeIndex).to.eql(0);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
context('Private Guild', () => {
|
|
||||||
let privateGuild; let user; let nonMember; let challenge; let
|
let privateGuild; let user; let nonMember; let challenge; let
|
||||||
challenge2;
|
challenge2;
|
||||||
|
|
||||||
@@ -128,6 +18,7 @@ describe('GET challenges/groups/:groupId', () => {
|
|||||||
type: 'guild',
|
type: 'guild',
|
||||||
privacy: 'private',
|
privacy: 'private',
|
||||||
},
|
},
|
||||||
|
upgradeToGroupPlan: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
privateGuild = group;
|
privateGuild = group;
|
||||||
@@ -186,68 +77,6 @@ describe('GET challenges/groups/:groupId', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
context('official challenge is present', () => {
|
|
||||||
let publicGuild; let user; let officialChallenge; let unofficialChallenges;
|
|
||||||
|
|
||||||
before(async () => {
|
|
||||||
const { group, groupLeader } = await createAndPopulateGroup({
|
|
||||||
groupDetails: {
|
|
||||||
name: 'TestGuild',
|
|
||||||
type: 'guild',
|
|
||||||
privacy: 'public',
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
user = groupLeader;
|
|
||||||
publicGuild = group;
|
|
||||||
|
|
||||||
await user.update({
|
|
||||||
'permissions.challengeAdmin': true,
|
|
||||||
});
|
|
||||||
|
|
||||||
officialChallenge = await generateChallenge(user, group, {
|
|
||||||
categories: [{
|
|
||||||
name: 'habitica_official',
|
|
||||||
slug: 'habitica_official',
|
|
||||||
}],
|
|
||||||
});
|
|
||||||
await user.post(`/challenges/${officialChallenge._id}/join`);
|
|
||||||
|
|
||||||
// We add 10 extra challenges to test whether the official challenge
|
|
||||||
// (the oldest) makes it to the front page.
|
|
||||||
unofficialChallenges = [];
|
|
||||||
for (let i = 0; i < 10; i += 1) {
|
|
||||||
const challenge = await generateChallenge(user, group); // eslint-disable-line
|
|
||||||
await user.post(`/challenges/${challenge._id}/join`); // eslint-disable-line
|
|
||||||
unofficialChallenges.push(challenge);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should return official challenges first', async () => {
|
|
||||||
const challenges = await user.get(`/challenges/groups/${publicGuild._id}`);
|
|
||||||
|
|
||||||
const foundChallengeIndex = _.findIndex(challenges, { _id: officialChallenge._id });
|
|
||||||
expect(foundChallengeIndex).to.eql(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should return newest challenges first, after official ones', async () => {
|
|
||||||
let challenges = await user.get(`/challenges/groups/${publicGuild._id}`);
|
|
||||||
|
|
||||||
unofficialChallenges.forEach((chal, index) => {
|
|
||||||
const foundChallengeIndex = _.findIndex(challenges, { _id: chal._id });
|
|
||||||
expect(foundChallengeIndex).to.eql(10 - index);
|
|
||||||
});
|
|
||||||
|
|
||||||
const newChallenge = await generateChallenge(user, publicGuild);
|
|
||||||
await user.post(`/challenges/${newChallenge._id}/join`);
|
|
||||||
|
|
||||||
challenges = await user.get(`/challenges/groups/${publicGuild._id}`);
|
|
||||||
|
|
||||||
const foundChallengeIndex = _.findIndex(challenges, { _id: newChallenge._id });
|
|
||||||
expect(foundChallengeIndex).to.eql(1);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
context('Party', () => {
|
context('Party', () => {
|
||||||
let party; let user; let nonMember; let challenge; let
|
let party; let user; let nonMember; let challenge; let
|
||||||
challenge2;
|
challenge2;
|
||||||
@@ -401,7 +230,7 @@ describe('GET challenges/groups/:groupId', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return tavern challenges using ID "habitrpg', async () => {
|
it('should return tavern challenges using ID "habitrpg"', async () => {
|
||||||
const challenges = await user.get('/challenges/groups/habitrpg');
|
const challenges = await user.get('/challenges/groups/habitrpg');
|
||||||
|
|
||||||
const foundChallenge1 = _.find(challenges, { _id: challenge._id });
|
const foundChallenge1 = _.find(challenges, { _id: challenge._id });
|
||||||
@@ -435,5 +264,57 @@ describe('GET challenges/groups/:groupId', () => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
context('official challenge is present', () => {
|
||||||
|
let officialChallenge; let unofficialChallenges;
|
||||||
|
|
||||||
|
before(async () => {
|
||||||
|
await user.update({
|
||||||
|
'permissions.challengeAdmin': true,
|
||||||
|
});
|
||||||
|
|
||||||
|
officialChallenge = await generateChallenge(user, tavern, {
|
||||||
|
categories: [{
|
||||||
|
name: 'habitica_official',
|
||||||
|
slug: 'habitica_official',
|
||||||
|
}],
|
||||||
|
prize: 1,
|
||||||
|
});
|
||||||
|
await user.post(`/challenges/${officialChallenge._id}/join`);
|
||||||
|
|
||||||
|
// We add 10 extra challenges to test whether the official challenge
|
||||||
|
// (the oldest) makes it to the front page.
|
||||||
|
unofficialChallenges = [];
|
||||||
|
for (let i = 0; i < 10; i += 1) {
|
||||||
|
const challenge = await generateChallenge(user, tavern, { prize: 1 }); // eslint-disable-line
|
||||||
|
await user.post(`/challenges/${challenge._id}/join`); // eslint-disable-line
|
||||||
|
unofficialChallenges.push(challenge);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return official challenges first', async () => {
|
||||||
|
const challenges = await user.get(`/challenges/groups/habitrpg`);
|
||||||
|
|
||||||
|
const foundChallengeIndex = _.findIndex(challenges, { _id: officialChallenge._id });
|
||||||
|
expect(foundChallengeIndex).to.eql(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return newest challenges first, after official ones', async () => {
|
||||||
|
let challenges = await user.get(`/challenges/groups/habitrpg`);
|
||||||
|
|
||||||
|
unofficialChallenges.forEach((chal, index) => {
|
||||||
|
const foundChallengeIndex = _.findIndex(challenges, { _id: chal._id });
|
||||||
|
expect(foundChallengeIndex).to.eql(10 - index);
|
||||||
|
});
|
||||||
|
|
||||||
|
const newChallenge = await generateChallenge(user, tavern, { prize: 1 });
|
||||||
|
await user.post(`/challenges/${newChallenge._id}/join`);
|
||||||
|
|
||||||
|
challenges = await user.get(`/challenges/groups/${publicGuild._id}`);
|
||||||
|
|
||||||
|
const foundChallengeIndex = _.findIndex(challenges, { _id: newChallenge._id });
|
||||||
|
expect(foundChallengeIndex).to.eql(1);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -42,26 +42,7 @@ describe('POST /challenges', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('returns error when creating a challenge in a public guild and you are not a member of it', async () => {
|
it('returns error when creating a challenge with summary with greater than MAX_SUMMARY_SIZE_FOR_CHALLENGES characters', async () => {
|
||||||
const user = await generateUser();
|
|
||||||
const { group } = await createAndPopulateGroup({
|
|
||||||
groupDetails: {
|
|
||||||
type: 'guild',
|
|
||||||
privacy: 'public',
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
await expect(user.post('/challenges', {
|
|
||||||
group: group._id,
|
|
||||||
prize: 4,
|
|
||||||
})).to.eventually.be.rejected.and.eql({
|
|
||||||
code: 401,
|
|
||||||
error: 'NotAuthorized',
|
|
||||||
message: t('mustBeGroupMember'),
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('return error when creating a challenge with summary with greater than MAX_SUMMARY_SIZE_FOR_CHALLENGES characters', async () => {
|
|
||||||
const user = await generateUser();
|
const user = await generateUser();
|
||||||
const summary = 'A'.repeat(MAX_SUMMARY_SIZE_FOR_CHALLENGES + 1);
|
const summary = 'A'.repeat(MAX_SUMMARY_SIZE_FOR_CHALLENGES + 1);
|
||||||
const group = createAndPopulateGroup({
|
const group = createAndPopulateGroup({
|
||||||
@@ -77,7 +58,7 @@ describe('POST /challenges', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
context('Creating a challenge for a valid group', () => {
|
context('creating a Challenge for a Group Plan', () => {
|
||||||
let groupLeader;
|
let groupLeader;
|
||||||
let group;
|
let group;
|
||||||
let groupMember;
|
let groupMember;
|
||||||
@@ -94,6 +75,7 @@ describe('POST /challenges', () => {
|
|||||||
challenges: true,
|
challenges: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
upgradeToGroupPlan: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
groupLeader = await populatedGroup.groupLeader.sync();
|
groupLeader = await populatedGroup.groupLeader.sync();
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ describe('PUT /challenges/:challengeId', () => {
|
|||||||
privacy: 'private',
|
privacy: 'private',
|
||||||
},
|
},
|
||||||
members: 1,
|
members: 1,
|
||||||
|
upgradeToGroupPlan: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
privateGuild = group;
|
privateGuild = group;
|
||||||
|
|||||||
Reference in New Issue
Block a user