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()
], 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
userToRemoveInvite = undefined
request.post(baseURL + "/groups").send(
name: "TestGroupToDeleteAfteLeave"
name: "TestGroupToDeleteAfterLeave"
type: "guild"
privacy: "private"
).end (res) ->
@@ -217,6 +217,53 @@ describe "Guilds", ->
cb()
], 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", ->
it "allows guild leaders to remove a member (but not themselves)", (done) ->
guildToRemoveMember = undefined

View File

@@ -87,6 +87,7 @@ GroupSchema.pre('save', function(next){
GroupSchema.pre('remove', function(next) {
var group = this;
if ( group.type == "guild" ) {
async.waterfall([
function(cb) {
User.find({
@@ -104,6 +105,28 @@ GroupSchema.pre('remove', function(next) {
cb();
}
], next);
} else if ( group.type == "party" ) {
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) {