Remove users inviations when guild is deleted

This commit is contained in:
TheHollidayInn 2015-09-04 14:44:47 -05:00
parent e68e29db8f
commit 700a6ddd9e
2 changed files with 65 additions and 1 deletions

View file

@ -172,6 +172,51 @@ describe "Guilds", ->
cb()
], done
it "deletes all invites to a group when the last member leaves", (done) ->
groupToDeleteAfterLeave = undefined
userToRemoveInvite = undefined
request.post(baseURL + "/groups").send(
name: "TestGroupToDeleteAfteLeave"
type: "guild"
privacy: "private"
).end (res) ->
groupToDeleteAfterLeave = res.body
async.waterfall [
(cb) ->
registerManyUsers 1, cb
(_members, cb) ->
userToRemoveInvite = _members[0]
inviteURL = baseURL + "/groups/" + groupToDeleteAfterLeave._id + "/invite"
request.post(inviteURL).send(
uuids: [userToRemoveInvite._id]
)
.end ->
cb()
(cb) ->
request.post(baseURL + "/groups/" + groupToDeleteAfterLeave._id + "/leave")
.end (res) ->
expectCode res, 204
cb()
(cb) ->
request.get(baseURL + '/user')
.set("X-API-User", userToRemoveInvite._id)
.set("X-API-Key", userToRemoveInvite.apiToken)
.end (err, res) ->
expectCode res, 200
groupInvitation = _.find(res.body.invitations.guilds, {id: groupToDeleteAfterLeave._id})
expect(groupInvitation).to.not.exist
cb()
(cb) ->
request.post(baseURL + "/groups/" + groupToDeleteAfterLeave._id)
.end (res) ->
expectCode res, 404
cb()
], done
context "removing users groups", ->
it "allows guild leaders to remove a member (but not themselves)", (done) ->
guildToRemoveMember = undefined

View file

@ -577,7 +577,26 @@ api.leave = function(req, res, next) {
} else if (group.members.length === 1) {
//We don't delete public groups when they are empty
if (group.privacy === 'private' || group.type === 'party') {
Group.remove({_id:group._id}, cb);
async.waterfall([
function(cb2) {
User.find({
'invitations.guilds.id': group._id
}, cb2);
},
function(users, cb2) {
if (users) {
users.forEach(function (user, index, array) {
var i = _.findIndex(user.invitations.guilds, {id: group._id});
user.invitations.guilds.splice(i, 1);
user.save();
});
}
cb2();
},
function(cb2) {
Group.remove({_id:group._id}, cb2);
},
], cb);
}
}
}