mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-16 14:17:22 +01:00
Merge pull request #11549 from Nikosmonaut/bugfix-11522_group_plan_tags
Fix can not remove group tag
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user