From 26f5ef093f4a47280e072227cc457d3b252a2745 Mon Sep 17 00:00:00 2001 From: SabreCat Date: Tue, 25 Jul 2023 15:39:17 -0500 Subject: [PATCH] fix(tests): update Challenges block for sunset --- .../GET-challenges_challengeId.test.js | 56 +---- ...GET-challenges_challengeId_members.test.js | 25 +- .../GET-challenges_group_groupid.test.js | 229 +++++------------- .../challenges/POST-challenges.test.js | 24 +- .../PUT-challenges_challengeId.test.js | 1 + 5 files changed, 62 insertions(+), 273 deletions(-) diff --git a/test/api/v3/integration/challenges/GET-challenges_challengeId.test.js b/test/api/v3/integration/challenges/GET-challenges_challengeId.test.js index 7f70513da8..fa50d2a66e 100644 --- a/test/api/v3/integration/challenges/GET-challenges_challengeId.test.js +++ b/test/api/v3/integration/challenges/GET-challenges_challengeId.test.js @@ -16,60 +16,7 @@ describe('GET /challenges/:challengeId', () => { }); }); - context('public guild', () => { - 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', () => { + context('Group Plan', () => { let groupLeader; let challengeLeader; let group; @@ -84,6 +31,7 @@ describe('GET /challenges/:challengeId', () => { const populatedGroup = await createAndPopulateGroup({ groupDetails: { type: 'guild', privacy: 'private' }, members: 2, + upgradeToGroupPlan: true, }); groupLeader = populatedGroup.groupLeader; 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 01560cf037..cb59c644f1 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 @@ -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 () => { 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); await anotherUser.post(`/challenges/${challenge._id}/join`); const res = await user.get(`/challenges/${challenge._id}/members`); diff --git a/test/api/v3/integration/challenges/GET-challenges_group_groupid.test.js b/test/api/v3/integration/challenges/GET-challenges_group_groupid.test.js index fc26d4ce0d..3bcfaaa627 100644 --- a/test/api/v3/integration/challenges/GET-challenges_group_groupid.test.js +++ b/test/api/v3/integration/challenges/GET-challenges_group_groupid.test.js @@ -7,117 +7,7 @@ import { import { TAVERN_ID } from '../../../../../website/common/script/constants'; describe('GET challenges/groups/:groupId', () => { - context('Public Guild', () => { - 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', () => { + context('Group Plan', () => { let privateGuild; let user; let nonMember; let challenge; let challenge2; @@ -128,6 +18,7 @@ describe('GET challenges/groups/:groupId', () => { type: 'guild', privacy: 'private', }, + upgradeToGroupPlan: true, }); 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', () => { let party; let user; let nonMember; let challenge; let 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 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); + }); + }); }); }); diff --git a/test/api/v3/integration/challenges/POST-challenges.test.js b/test/api/v3/integration/challenges/POST-challenges.test.js index 3c566b76d9..86ed76ba2d 100644 --- a/test/api/v3/integration/challenges/POST-challenges.test.js +++ b/test/api/v3/integration/challenges/POST-challenges.test.js @@ -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 () => { - 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 () => { + it('returns error when creating a challenge with summary with greater than MAX_SUMMARY_SIZE_FOR_CHALLENGES characters', async () => { const user = await generateUser(); const summary = 'A'.repeat(MAX_SUMMARY_SIZE_FOR_CHALLENGES + 1); 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 group; let groupMember; @@ -94,6 +75,7 @@ describe('POST /challenges', () => { challenges: true, }, }, + upgradeToGroupPlan: true, }); groupLeader = await populatedGroup.groupLeader.sync(); diff --git a/test/api/v3/integration/challenges/PUT-challenges_challengeId.test.js b/test/api/v3/integration/challenges/PUT-challenges_challengeId.test.js index 22e1f38b18..4e82da370a 100644 --- a/test/api/v3/integration/challenges/PUT-challenges_challengeId.test.js +++ b/test/api/v3/integration/challenges/PUT-challenges_challengeId.test.js @@ -18,6 +18,7 @@ describe('PUT /challenges/:challengeId', () => { privacy: 'private', }, members: 1, + upgradeToGroupPlan: true, }); privateGuild = group;