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 cb59c644f1..fe729e38f3 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 @@ -72,18 +72,17 @@ describe('GET /challenges/:challengeId/members', () => { }); it('populates only some fields', async () => { - const anotherUser = await generateUser({ balance: 3 }); - 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 group = await generateGroup(user, { type: 'party', privacy: 'private', name: generateUUID() }); + const challenge = await generateChallenge(user, group); + await user.post(`/challenges/${challenge._id}/join`); const res = await user.get(`/challenges/${challenge._id}/members`); expect(res[0]).to.eql({ - _id: anotherUser._id, - id: anotherUser._id, - profile: { name: anotherUser.profile.name }, + _id: user._id, + id: user._id, + profile: { name: user.profile.name }, auth: { local: { - username: anotherUser.auth.local.username, + username: user.auth.local.username, }, }, flags: { 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 03ffa8d8f4..5fe0068899 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 @@ -72,20 +72,6 @@ describe('GET /challenges/:challengeId/members/:memberId', () => { }); }); - it('works with challenges belonging to a public guild', async () => { - const groupLeader = await generateUser({ balance: 4 }); - const group = await generateGroup(groupLeader, { type: 'guild', privacy: 'public', name: generateUUID() }); - const challenge = await generateChallenge(groupLeader, group); - await groupLeader.post(`/challenges/${challenge._id}/join`); - const taskText = 'Test Text'; - await groupLeader.post(`/tasks/challenge/${challenge._id}`, [{ type: 'habit', text: taskText }]); - - const memberProgress = await user.get(`/challenges/${challenge._id}/members/${groupLeader._id}`); - expect(memberProgress).to.have.all.keys(['_id', 'auth', 'flags', 'id', 'profile', 'tasks']); - expect(memberProgress.profile).to.have.all.keys(['name']); - expect(memberProgress.tasks.length).to.equal(1); - }); - it('returns the member tasks for the challenges', async () => { const group = await generateGroup(user, { type: 'party', name: generateUUID() }); const challenge = await generateChallenge(user, group); 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 abbfb50ae2..f25d5eaf30 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 @@ -271,6 +271,7 @@ describe('GET challenges/groups/:groupId', () => { before(async () => { await user.update({ 'permissions.challengeAdmin': true, + 'balance': 3, }); officialChallenge = await generateChallenge(user, tavern, { diff --git a/test/api/v3/integration/challenges/GET-challenges_user.test.js b/test/api/v3/integration/challenges/GET-challenges_user.test.js index cc9c3aabd7..c295f9da02 100644 --- a/test/api/v3/integration/challenges/GET-challenges_user.test.js +++ b/test/api/v3/integration/challenges/GET-challenges_user.test.js @@ -3,38 +3,40 @@ import { generateChallenge, createAndPopulateGroup, } from '../../../../helpers/api-integration/v3'; +import { TAVERN_ID } from '../../../../../website/common/script/constants'; describe('GET challenges/user', () => { context('no official challenges', () => { - let user; let member; let nonMember; let challenge; let challenge2; - let publicGuild; let userData; let groupData; + let user; let member; let nonMember; let challenge; let challenge2; let publicChallenge; + let groupPlan; let userData; let groupData; let tavern; let tavernData; before(async () => { const { group, groupLeader, members } = await createAndPopulateGroup({ groupDetails: { name: 'TestGuild', type: 'guild', - privacy: 'public', + privacy: 'private', }, members: 1, + upgradeToGroupPlan: true, }); - publicGuild = group; + groupPlan = group; groupData = { - _id: publicGuild._id, + _id: groupPlan._id, categories: [], - id: publicGuild._id, - type: publicGuild.type, - privacy: publicGuild.privacy, - name: publicGuild.name, - summary: publicGuild.name, - leader: publicGuild.leader._id, + id: groupPlan._id, + type: groupPlan.type, + privacy: groupPlan.privacy, + name: groupPlan.name, + summary: groupPlan.name, + leader: groupPlan.leader._id, }; user = groupLeader; userData = { - _id: publicGuild.leader._id, - id: publicGuild.leader._id, + _id: groupPlan.leader._id, + id: groupPlan.leader._id, profile: { name: user.profile.name }, auth: { local: { @@ -46,17 +48,31 @@ describe('GET challenges/user', () => { }, }; + tavern = await user.get(`/groups/${TAVERN_ID}`); + tavernData = { + _id: TAVERN_ID, + categories: [], + id: TAVERN_ID, + type: tavern.type, + privacy: tavern.privacy, + name: tavern.name, + summary: tavern.name, + leader: tavern.leader._id, + }; + member = members[0]; // eslint-disable-line prefer-destructuring nonMember = await generateUser(); challenge = await generateChallenge(user, group); challenge2 = await generateChallenge(user, group); + await user.update({ balance: 0.25 }); + publicChallenge = await generateChallenge(user, tavern, { prize: 1 }); - await nonMember.post(`/challenges/${challenge._id}/join`); + await member.post(`/challenges/${challenge._id}/join`); }); context('all challenges', () => { it('should return challenges user has joined', async () => { - const challenges = await nonMember.get('/challenges/user?page=0'); + const challenges = await member.get('/challenges/user?page=0'); const foundChallenge = _.find(challenges, { _id: challenge._id }); expect(foundChallenge).to.exist; @@ -64,11 +80,13 @@ describe('GET challenges/user', () => { expect(foundChallenge.group).to.eql(groupData); }); - it('should not return challenges a non-member has not joined', async () => { + it('should return public challenges', async () => { const challenges = await nonMember.get('/challenges/user?page=0'); - const foundChallenge2 = _.find(challenges, { _id: challenge2._id }); - expect(foundChallenge2).to.not.exist; + const foundPublicChallenge = _.find(challenges, { _id: publicChallenge._id }); + expect(foundPublicChallenge).to.exist; + expect(foundPublicChallenge.leader).to.eql(userData); + expect(foundPublicChallenge.group).to.eql(tavernData); }); it('should return challenges user has created', async () => { @@ -100,10 +118,10 @@ describe('GET challenges/user', () => { it('should return newest challenges first', async () => { let challenges = await user.get('/challenges/user?page=0'); - let foundChallengeIndex = _.findIndex(challenges, { _id: challenge2._id }); + let foundChallengeIndex = _.findIndex(challenges, { _id: publicChallenge._id }); expect(foundChallengeIndex).to.eql(0); - const newChallenge = await generateChallenge(user, publicGuild); + const newChallenge = await generateChallenge(user, groupPlan); await user.post(`/challenges/${newChallenge._id}/join`); challenges = await user.get('/challenges/user?page=0'); @@ -113,52 +131,23 @@ describe('GET challenges/user', () => { }); it('should not return challenges user doesn\'t have access to', async () => { - const { group, groupLeader } = await createAndPopulateGroup({ - groupDetails: { - name: 'TestPrivateGuild', - summary: 'summary for TestPrivateGuild', - type: 'guild', - privacy: 'private', - }, - }); - - const privateChallenge = await generateChallenge(groupLeader, group); - await groupLeader.post(`/challenges/${privateChallenge._id}/join`); - const challenges = await nonMember.get('/challenges/user?page=0'); - const foundChallenge = _.find(challenges, { _id: privateChallenge._id }); + const foundChallenge = _.find(challenges, { _id: challenge._id }); expect(foundChallenge).to.not.exist; }); it('should not return challenges user doesn\'t have access to, even with query parameters', async () => { - const { group, groupLeader } = await createAndPopulateGroup({ - groupDetails: { - name: 'TestPrivateGuild', - summary: 'summary for TestPrivateGuild', - type: 'guild', - privacy: 'private', - }, - }); - - const privateChallenge = await generateChallenge(groupLeader, group, { - categories: [{ - name: 'academics', - slug: 'academics', - }], - }); - await groupLeader.post(`/challenges/${privateChallenge._id}/join`); - const challenges = await nonMember.get('/challenges/user?page=0&categories=academics&owned=not_owned'); - const foundChallenge = _.find(challenges, { _id: privateChallenge._id }); + const foundChallenge = _.find(challenges, { _id: challenge._id }); expect(foundChallenge).to.not.exist; }); }); context('my challenges', () => { it('should return challenges user has joined', async () => { - const challenges = await nonMember.get(`/challenges/user?page=0&member=${true}`); + const challenges = await member.get(`/challenges/user?page=0&member=${true}`); const foundChallenge = _.find(challenges, { _id: challenge._id }); expect(foundChallenge).to.exist; @@ -177,6 +166,10 @@ describe('GET challenges/user', () => { expect(foundChallenge2).to.exist; expect(foundChallenge2.leader).to.eql(userData); expect(foundChallenge2.group).to.eql(groupData); + const foundPublicChallenge = _.find(challenges, { _id: publicChallenge._id }); + expect(foundPublicChallenge).to.exist; + expect(foundPublicChallenge.leader).to.eql(userData); + expect(foundPublicChallenge.group).to.eql(tavernData); }); it('should return challenges user has created if filter by owned', async () => { @@ -190,6 +183,10 @@ describe('GET challenges/user', () => { expect(foundChallenge2).to.exist; expect(foundChallenge2.leader).to.eql(userData); expect(foundChallenge2.group).to.eql(groupData); + const foundPublicChallenge = _.find(challenges, { _id: publicChallenge._id }); + expect(foundPublicChallenge).to.exist; + expect(foundPublicChallenge.leader).to.eql(userData); + expect(foundPublicChallenge.group).to.eql(tavernData); }); it('should not return challenges user has created if filter by not owned', async () => { @@ -199,23 +196,29 @@ describe('GET challenges/user', () => { expect(foundChallenge1).to.not.exist; const foundChallenge2 = _.find(challenges, { _id: challenge2._id }); expect(foundChallenge2).to.not.exist; + const foundPublicChallenge = _.find(challenges, { _id: publicChallenge._id }); + expect(foundPublicChallenge).to.not.exist; }); it('should not return challenges in user groups', async () => { const challenges = await member.get(`/challenges/user?page=0&member=${true}`); - const foundChallenge1 = _.find(challenges, { _id: challenge._id }); - expect(foundChallenge1).to.not.exist; - const foundChallenge2 = _.find(challenges, { _id: challenge2._id }); expect(foundChallenge2).to.not.exist; }); + + it('should not return public challenges', async () => { + const challenges = await member.get(`/challenges/user?page=0&member=${true}`); + + const foundPublicChallenge = _.find(challenges, { _id: publicChallenge._id }); + expect(foundPublicChallenge).to.not.exist; + }); }); }); context('official challenge is present', () => { let user; let officialChallenge; let unofficialChallenges; let - publicGuild; + groupPlan; before(async () => { const { group, groupLeader } = await createAndPopulateGroup({ @@ -223,12 +226,13 @@ describe('GET challenges/user', () => { name: 'TestGuild', summary: 'summary for TestGuild', type: 'guild', - privacy: 'public', + privacy: 'private', }, + upgradeToGroupPlan: true, }); user = groupLeader; - publicGuild = group; + groupPlan = group; await user.update({ 'permissions.challengeAdmin': true, @@ -271,7 +275,7 @@ describe('GET challenges/user', () => { } }); - const newChallenge = await generateChallenge(user, publicGuild); + const newChallenge = await generateChallenge(user, groupPlan); await user.post(`/challenges/${newChallenge._id}/join`); challenges = await user.get('/challenges/user?page=0'); @@ -294,9 +298,10 @@ describe('GET challenges/user', () => { groupDetails: { name: 'TestGuild', type: 'guild', - privacy: 'public', + privacy: 'private', }, members: 1, + upgradeToGroupPlan: true, }); user = groupLeader; diff --git a/test/api/v3/integration/challenges/POST-challenges.test.js b/test/api/v3/integration/challenges/POST-challenges.test.js index 86ed76ba2d..fa490725cf 100644 --- a/test/api/v3/integration/challenges/POST-challenges.test.js +++ b/test/api/v3/integration/challenges/POST-challenges.test.js @@ -79,6 +79,7 @@ describe('POST /challenges', () => { }); groupLeader = await populatedGroup.groupLeader.sync(); + await groupLeader.update({ permissions: {} }); group = populatedGroup.group; groupMember = populatedGroup.members[0]; // eslint-disable-line prefer-destructuring }); diff --git a/test/api/v3/integration/chat/DELETE-chat_id.test.js b/test/api/v3/integration/chat/DELETE-chat_id.test.js index 7a9756e673..f08fcedd8e 100644 --- a/test/api/v3/integration/chat/DELETE-chat_id.test.js +++ b/test/api/v3/integration/chat/DELETE-chat_id.test.js @@ -1,7 +1,6 @@ import { v4 as generateUUID } from 'uuid'; import { createAndPopulateGroup, - generateUser, translate as t, } from '../../../../helpers/api-integration/v3'; @@ -10,27 +9,30 @@ describe('DELETE /groups/:groupId/chat/:chatId', () => { admin; before(async () => { - const { group, groupLeader } = await createAndPopulateGroup({ + const { group, groupLeader, members } = await createAndPopulateGroup({ groupDetails: { type: 'guild', - privacy: 'public', + privacy: 'private', }, leaderDetails: { 'auth.timestamps.created': new Date('2022-01-01'), balance: 10, }, + members: 2, + upgradeToGroupPlan: true, }); groupWithChat = group; user = groupLeader; message = await user.post(`/groups/${groupWithChat._id}/chat`, { message: 'Some message' }); message = message.message; - userThatDidNotCreateChat = await generateUser(); - admin = await generateUser({ 'permissions.moderator': true }); + userThatDidNotCreateChat = members[0]; + admin = members[1]; + await admin.update({ permissions: { moderator: true }}); }); context('Chat errors', () => { - it('returns an error is message does not exist', async () => { + it('returns an error if message does not exist', async () => { const fakeChatId = generateUUID(); await expect(user.del(`/groups/${groupWithChat._id}/chat/${fakeChatId}`)).to.eventually.be.rejected.and.eql({ code: 404, @@ -56,7 +58,7 @@ describe('DELETE /groups/:groupId/chat/:chatId', () => { nextMessage = nextMessage.message; }); - it('allows creator to delete a their message', async () => { + it('allows creator to delete their message', async () => { await user.del(`/groups/${groupWithChat._id}/chat/${nextMessage.id}`); const returnedMessages = await user.get(`/groups/${groupWithChat._id}/chat/`); diff --git a/test/api/v3/integration/chat/GET-chat.test.js b/test/api/v3/integration/chat/GET-chat.test.js index 910b094c40..34f4316dad 100644 --- a/test/api/v3/integration/chat/GET-chat.test.js +++ b/test/api/v3/integration/chat/GET-chat.test.js @@ -1,6 +1,6 @@ import { generateUser, - generateGroup, + createAndPopulateGroup, translate as t, } from '../../../../helpers/api-integration/v3'; @@ -11,48 +11,22 @@ describe('GET /groups/:groupId/chat', () => { user = await generateUser(); }); - context('public Guild', () => { - let group; - - before(async () => { - const leader = await generateUser({ balance: 2 }); - - group = await generateGroup(leader, { - name: 'test group', - type: 'guild', - privacy: 'public', - }, { - chat: [ - { text: 'Hello', flags: {}, id: 1 }, - { text: 'Welcome to the Guild', flags: {}, id: 2 }, - ], - }); - }); - - it('returns Guild chat', async () => { - const chat = await user.get(`/groups/${group._id}/chat`); - - expect(chat[0].id).to.eql(group.chat[0].id); - expect(chat[1].id).to.eql(group.chat[1].id); - }); - }); - context('private Guild', () => { let group; - before(async () => { - const leader = await generateUser({ balance: 2 }); - - group = await generateGroup(leader, { - name: 'test group', - type: 'guild', - privacy: 'private', - }, { + ({ group } = await createAndPopulateGroup({ + groupDetails: { + name: 'test group', + type: 'guild', + privacy: 'private', + }, + members: 1, + upgradeToGroupPlan: true, chat: [ 'Hello', 'Welcome to the Guild', ], - }); + })); }); it('returns error if user is not member of requested private group', async () => {