Removed user's party invites when last user leaves party

This commit is contained in:
TheHollidayInn
2015-09-10 23:29:32 -05:00
parent e86809dc07
commit 5c8c5a9ed3
2 changed files with 88 additions and 18 deletions

View File

@@ -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

View File

@@ -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) {