diff --git a/test/api.mocha.coffee b/test/api.mocha.coffee index 5b54e6052c..fd3fe97bd3 100644 --- a/test/api.mocha.coffee +++ b/test/api.mocha.coffee @@ -227,7 +227,7 @@ describe "API", -> ).end (res) -> expectCode res, 200 body = res.body - expect(body).to.be.empty + expect(body).to.be.empty done() it "Does not delete already deleted todo", (done) -> @@ -257,16 +257,161 @@ describe "API", -> describe "Groups", -> group = undefined before (done) -> - request.post(baseURL + "/groups").send( - name: "TestGroup" - type: "party" - ).end (res) -> - expectCode res, 200 - group = res.body - expect(group.members.length).to.be 1 - expect(group.leader).to.be user._id + request.post(baseURL + "/groups").send( + name: "TestGroup" + type: "party" + ).end (res) -> + expectCode res, 200 + group = res.body + expect(group.members.length).to.be 1 + expect(group.leader).to.be user._id + done() + + describe "Guilds", -> + + before (done) -> + User.findByIdAndUpdate user._id, + $set: + "balance": 4 + , (err, _user) -> done() + it "includes user in private group member list when user is a member", (done) -> + guild = undefined + request.post(baseURL + "/groups").send( + name: "TestPrivateGroup" + type: "guild" + privacy: "private" + ).end (res) -> + expectCode res, 200 + guild = res.body + expect(guild.members.length).to.be 1 + expect(guild.leader).to.be user._id + #Add members to guild + async.waterfall [ + (cb) -> + async.parallel [ + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + ], cb + + (_members, cb) -> + members = _members + + joinGuild = (member, callback) -> + request.post(baseURL + "/groups/" + guild._id + "/join") + .set("X-API-User", member._id) + .set("X-API-Key", member.apiToken) + .end -> + callback(null, null) + + async.map members, joinGuild, (err, results) -> cb() + + (cb) -> + #Verfiy that when a user query's for a group they are in the group if they are a member + Group.findById guild._id, (err, g) -> + expect(g.members.length).to.be 16 + userInGroup = _.find group.members, (member) -> return member._id == user._id + expect(userInGroup).to.not.be undefined + cb() + ], done + + it "includes user in public group member list when user is a member", (done) -> + guild = undefined + request.post(baseURL + "/groups").send( + name: "TestPublicGroup" + type: "guild" + privacy: "public" + ).end (res) -> + expectCode res, 200 + guild = res.body + expect(guild.members.length).to.be 1 + expect(guild.leader).to.be user._id + #Add members to guild + async.waterfall [ + (cb) -> + async.parallel [ + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + ], cb + + (_members, cb) -> + members = _members + + joinGuild = (member, callback) -> + request.post(baseURL + "/groups/" + guild._id + "/join") + .set("X-API-User", member._id) + .set("X-API-Key", member.apiToken) + .end -> + callback(null, null) + + async.map members, joinGuild, (err, results) -> cb() + + (cb) -> + #Verfiy that when a user query's for a group they are in the group if they are a member + Group.findById guild._id, (err, g) -> + expect(g.members.length).to.be 16 + userInGroup = _.find group.members, (member) -> return member._id == user._id + expect(userInGroup).to.not.be undefined + cb() + ], done + describe "Party", -> it "can be found by querying for party", (done) -> request.get(baseURL + "/groups/").send( @@ -282,6 +427,95 @@ describe "API", -> expect(party.memberCount).to.be group.memberCount done() + it "includes user in a party member list when user is a member", (done) -> + party = [] + + #Invite some members + async.waterfall [ + + # Register new users + (cb) -> + async.parallel [ + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + (cb2) -> + registerNewUser cb2, false + ], cb + + # Send them invitations + (_party, cb) -> + party = _party + + joinParty = (member, callback) -> + request.post(baseURL + "/groups/" + group._id + "/join") + .set("X-API-User", member._id) + .set("X-API-Key", member.apiToken) + .end -> + callback(null, null) + + async.map party, joinParty, (err, results) -> cb() + + # Accept / Reject + (cb) -> + # series since they'll be modifying the same group record + series = _.reduce(party, (m, v, i) -> + m.push (cb2) -> + request.post(baseURL + "/groups/" + group._id + "/join") + .set("X-API-User", party[i]._id) + .set("X-API-Key", party[i].apiToken) + .end -> + cb2() + m + , []) + async.series series, cb + + # Make sure the invites stuck + (result, cb) -> + Group.findById group._id, (err, g) -> + userInGroup = _.find group.members, (member) -> return member._id == user._id + expect(userInGroup).to.not.be undefined + cb() + + # Remove all previous members + (cb) -> + + joinParty = (member, callback) -> + request.post(baseURL + "/groups/" + group._id + "/leave") + .set("X-API-User", member._id) + .set("X-API-Key", member.apiToken) + .end -> + callback(null, null) + + async.map party, joinParty, (err, results) -> cb() + + ], done + describe "Chat", -> chat = undefined it "Posts a message to party chat", (done) -> diff --git a/website/src/controllers/groups.js b/website/src/controllers/groups.js index 47f666a0bc..797858b78a 100644 --- a/website/src/controllers/groups.js +++ b/website/src/controllers/groups.js @@ -439,7 +439,10 @@ api.join = function(req, res, next) { if (!_.contains(group.members, user._id)){ group.members.push(user._id); - group.invites.splice(_.indexOf(group.invites, user._id), 1); + //Can we have someone joing without an invite? I added this for testing since we join users without an invite + if (group.invites.length > 0) { + group.invites.splice(_.indexOf(group.invites, user._id), 1); + } } async.series([ @@ -451,7 +454,6 @@ api.join = function(req, res, next) { } ], function(err, results){ if (err) return next(err); - // Return the group? Or not? res.json(results[1]); group = null;