Merge pull request #11549 from Nikosmonaut/bugfix-11522_group_plan_tags

Fix can not remove group tag
This commit is contained in:
Matteo Pagliazzi
2020-01-19 12:29:04 +01:00
committed by GitHub
2 changed files with 28 additions and 0 deletions

View File

@@ -1164,6 +1164,23 @@ describe('Group Model', () => {
}); });
}); });
it('unlink group tag', async () => {
participatingMember.tags.push({
name: party.name,
id: party._id,
group: party._id,
});
await participatingMember.save();
await party.leave(participatingMember);
participatingMember = await User.findOne({ _id: participatingMember._id });
const groupTag = participatingMember.tags.find(tag => tag.id === party._id);
expect(groupTag).to.not.be.undefined;
expect(groupTag.group).to.be.undefined;
});
it('deletes a private party when the last member leaves', async () => { it('deletes a private party when the last member leaves', async () => {
await party.leave(participatingMember); await party.leave(participatingMember);
await party.leave(sleepingParticipatingMember); await party.leave(sleepingParticipatingMember);

View File

@@ -1345,6 +1345,8 @@ schema.methods.leave = async function leaveGroup (user, keep = 'keep-all', keepC
.map(task => this.unlinkTask(task, user, keep, false)); .map(task => this.unlinkTask(task, user, keep, false));
await Promise.all(assignedTasksToRemoveUserFrom); await Promise.all(assignedTasksToRemoveUserFrom);
this.unlinkTags(user);
// the user could be modified by calls to `unlinkTask` for challenge and group tasks // the user could be modified by calls to `unlinkTask` for challenge and group tasks
// it has not been saved before to avoid multiple saves in parallel // it has not been saved before to avoid multiple saves in parallel
const promises = user.isModified() ? [user.save()] : []; const promises = user.isModified() ? [user.save()] : [];
@@ -1407,6 +1409,15 @@ schema.methods.leave = async function leaveGroup (user, keep = 'keep-all', keepC
return Promise.all(promises); return Promise.all(promises);
}; };
schema.methods.unlinkTags = function unlinkTags (user) {
const group = this;
user.tags.forEach(tag => {
if (tag.group && tag.group === group._id) {
tag.group = undefined;
}
});
};
/** /**
* Updates all linked tasks for a group task * Updates all linked tasks for a group task
* *