mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-18 07:07:35 +01:00
Removed user's party invites when last user leaves party
This commit is contained in:
@@ -172,11 +172,11 @@ describe "Guilds", ->
|
|||||||
cb()
|
cb()
|
||||||
], done
|
], done
|
||||||
|
|
||||||
it "deletes all invites to a group when the last member leaves", (done) ->
|
it "deletes all invites to a group (guild) when the last member leaves", (done) ->
|
||||||
groupToDeleteAfterLeave = undefined
|
groupToDeleteAfterLeave = undefined
|
||||||
userToRemoveInvite = undefined
|
userToRemoveInvite = undefined
|
||||||
request.post(baseURL + "/groups").send(
|
request.post(baseURL + "/groups").send(
|
||||||
name: "TestGroupToDeleteAfteLeave"
|
name: "TestGroupToDeleteAfterLeave"
|
||||||
type: "guild"
|
type: "guild"
|
||||||
privacy: "private"
|
privacy: "private"
|
||||||
).end (res) ->
|
).end (res) ->
|
||||||
@@ -217,6 +217,53 @@ describe "Guilds", ->
|
|||||||
cb()
|
cb()
|
||||||
], done
|
], done
|
||||||
|
|
||||||
|
it "deletes all invites to a group (party) when the last member leaves", (done) ->
|
||||||
|
partyToDeleteAfterLeave = undefined
|
||||||
|
userToRemovePartyInvite = undefined
|
||||||
|
request.post(baseURL + "/groups").send(
|
||||||
|
name: "TestPartyToDeleteAfterLeave"
|
||||||
|
type: "party"
|
||||||
|
).end (res) ->
|
||||||
|
partyToDeleteAfterLeave = res.body
|
||||||
|
async.waterfall [
|
||||||
|
(cb) ->
|
||||||
|
registerManyUsers 1, cb
|
||||||
|
|
||||||
|
(_members, cb) ->
|
||||||
|
userToRemovePartyInvite = _members[0]
|
||||||
|
inviteURL = baseURL + "/groups/" + partyToDeleteAfterLeave._id + "/invite"
|
||||||
|
request.post(inviteURL).send(
|
||||||
|
uuids: [userToRemovePartyInvite._id]
|
||||||
|
)
|
||||||
|
.end ->
|
||||||
|
cb()
|
||||||
|
|
||||||
|
(cb) ->
|
||||||
|
request.post(baseURL + "/groups/" + partyToDeleteAfterLeave._id + "/leave")
|
||||||
|
.end (res) ->
|
||||||
|
expectCode res, 204
|
||||||
|
cb()
|
||||||
|
|
||||||
|
(cb) ->
|
||||||
|
request.get(baseURL + '/user')
|
||||||
|
.set("X-API-User", userToRemovePartyInvite._id)
|
||||||
|
.set("X-API-Key", userToRemovePartyInvite.apiToken)
|
||||||
|
.end (err, res) ->
|
||||||
|
expectCode res, 200
|
||||||
|
party = partyToDeleteAfterLeave
|
||||||
|
partyInvitation = _.find(res.body.invitations.party, (invite) ->
|
||||||
|
return invite == party._id
|
||||||
|
)
|
||||||
|
expect(partyInvitation).to.not.exist
|
||||||
|
cb()
|
||||||
|
|
||||||
|
(cb) ->
|
||||||
|
request.post(baseURL + "/groups/" + partyToDeleteAfterLeave._id)
|
||||||
|
.end (res) ->
|
||||||
|
expectCode res, 404
|
||||||
|
cb()
|
||||||
|
], done
|
||||||
|
|
||||||
context "removing users groups", ->
|
context "removing users groups", ->
|
||||||
it "allows guild leaders to remove a member (but not themselves)", (done) ->
|
it "allows guild leaders to remove a member (but not themselves)", (done) ->
|
||||||
guildToRemoveMember = undefined
|
guildToRemoveMember = undefined
|
||||||
|
|||||||
@@ -87,23 +87,46 @@ GroupSchema.pre('save', function(next){
|
|||||||
|
|
||||||
GroupSchema.pre('remove', function(next) {
|
GroupSchema.pre('remove', function(next) {
|
||||||
var group = this;
|
var group = this;
|
||||||
async.waterfall([
|
if ( group.type == "guild" ) {
|
||||||
function(cb) {
|
async.waterfall([
|
||||||
User.find({
|
function(cb) {
|
||||||
'invitations.guilds.id': group._id
|
User.find({
|
||||||
}, cb);
|
'invitations.guilds.id': group._id
|
||||||
},
|
}, cb);
|
||||||
function(users, cb) {
|
},
|
||||||
if (users) {
|
function(users, cb) {
|
||||||
users.forEach(function (user, index, array) {
|
if (users) {
|
||||||
var i = _.findIndex(user.invitations.guilds, {id: group._id});
|
users.forEach(function (user, index, array) {
|
||||||
user.invitations.guilds.splice(i, 1);
|
var i = _.findIndex(user.invitations.guilds, {id: group._id});
|
||||||
user.save();
|
user.invitations.guilds.splice(i, 1);
|
||||||
});
|
user.save();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
cb();
|
||||||
}
|
}
|
||||||
cb();
|
], next);
|
||||||
}
|
} else if ( group.type == "party" ) {
|
||||||
], next);
|
async.waterfall([
|
||||||
|
function(cb) {
|
||||||
|
User.find({
|
||||||
|
'invitations.party.id': group._id
|
||||||
|
}, cb);
|
||||||
|
},
|
||||||
|
function(users, cb) {
|
||||||
|
if (users) {
|
||||||
|
users.forEach(function (user, index, array) {
|
||||||
|
if (user.invitations.party.id === group._id) {
|
||||||
|
user.invitations.party = {};
|
||||||
|
}
|
||||||
|
user.save();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
cb();
|
||||||
|
}
|
||||||
|
], next);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
GroupSchema.post('remove', function(group) {
|
GroupSchema.post('remove', function(group) {
|
||||||
|
|||||||
Reference in New Issue
Block a user