diff --git a/test/api/v3/integration/groups/POST-groups_id_removeMember.test.js b/test/api/v3/integration/groups/POST-groups_id_removeMember.test.js index 0ebde39361..c051ea6bf0 100644 --- a/test/api/v3/integration/groups/POST-groups_id_removeMember.test.js +++ b/test/api/v3/integration/groups/POST-groups_id_removeMember.test.js @@ -84,7 +84,7 @@ describe('POST /groups/:groupId/removeMember/:memberId', () => { context('Party', () => { let party; - let partyleader; + let partyLeader; let partyInvitedUser; let partyMember; @@ -100,13 +100,13 @@ describe('POST /groups/:groupId/removeMember/:memberId', () => { }); party = group; - partyleader = groupLeader; + partyLeader = groupLeader; partyInvitedUser = invitees[0]; partyMember = members[0]; }); it('can remove other members', async () => { - await partyleader.post(`/groups/${party._id}/removeMember/${partyMember._id}`); + await partyLeader.post(`/groups/${party._id}/removeMember/${partyMember._id}`); let memberRemoved = await partyMember.get('/user'); @@ -115,16 +115,61 @@ describe('POST /groups/:groupId/removeMember/:memberId', () => { it('updates memberCount', async () => { let oldMemberCount = party.memberCount; - await partyleader.post(`/groups/${party._id}/removeMember/${partyMember._id}`); - await expect(partyleader.get(`/groups/${party._id}`)).to.eventually.have.property('memberCount', oldMemberCount - 1); + await partyLeader.post(`/groups/${party._id}/removeMember/${partyMember._id}`); + await expect(partyLeader.get(`/groups/${party._id}`)).to.eventually.have.property('memberCount', oldMemberCount - 1); }); it('can remove other invites', async () => { - await partyleader.post(`/groups/${party._id}/removeMember/${partyInvitedUser._id}`); + await partyLeader.post(`/groups/${party._id}/removeMember/${partyInvitedUser._id}`); let invitedUserWithoutInvite = await partyInvitedUser.get('/user'); expect(_.findIndex(invitedUserWithoutInvite.invitations.party, {id: party._id})).eql(-1); }); + + it('removes user from quest when removing user from party after quest starts', async () => { + let petQuest = 'whale'; + await partyLeader.update({ + [`items.quests.${petQuest}`]: 1, + }); + + await partyLeader.post(`/groups/${party._id}/quests/invite/${petQuest}`); + await partyMember.post(`/groups/${party._id}/quests/accept`); + + await party.sync(); + + expect(party.quest.members[partyLeader._id]).to.be.true; + expect(party.quest.members[partyMember._id]).to.be.true; + + await partyLeader.post(`/groups/${party._id}/removeMember/${partyMember._id}`); + + await party.sync(); + + expect(party.quest.members[partyLeader._id]).to.be.true; + expect(party.quest.members[partyMember._id]).to.not.exist; + }); + + it('removes user from quest when removing user from party before quest starts', async () => { + let petQuest = 'whale'; + await partyLeader.update({ + [`items.quests.${petQuest}`]: 1, + }); + await partyInvitedUser.post(`/groups/${party._id}/join`); + await partyLeader.post(`/groups/${party._id}/quests/invite/${petQuest}`); + await partyMember.post(`/groups/${party._id}/quests/accept`); + + await party.sync(); + + expect(party.quest.active).to.be.false; + expect(party.quest.members[partyLeader._id]).to.be.true; + expect(party.quest.members[partyMember._id]).to.be.true; + + await partyLeader.post(`/groups/${party._id}/removeMember/${partyMember._id}`); + + await party.sync(); + + expect(party.quest.members[partyLeader._id]).to.be.true; + expect(party.quest.members[partyMember._id]).to.not.exist; + }); }); }); diff --git a/website/server/controllers/api-v3/groups.js b/website/server/controllers/api-v3/groups.js index d2bb820370..62fba9deb5 100644 --- a/website/server/controllers/api-v3/groups.js +++ b/website/server/controllers/api-v3/groups.js @@ -436,7 +436,7 @@ api.removeGroupMember = { group.quest.leader = undefined; } else if (group.quest && group.quest.members) { // remove member from quest - group.quest.members[member._id] = undefined; + delete group.quest.members[member._id]; group.markModified('quest.members'); }