From 9abe67b0ad6de8bc59279bda3cea7699e130763e Mon Sep 17 00:00:00 2001 From: Blade Barringer Date: Tue, 8 Sep 2015 19:24:26 -0500 Subject: [PATCH] Prevent quest leaders from leaving party (cherry picked from commit dc43aa5902e89de4fa12f2747dd36c7906197a43) --- test/server_side/controllers/groups.test.js | 13 +++++++++++++ website/src/controllers/groups.js | 10 ++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/test/server_side/controllers/groups.test.js b/test/server_side/controllers/groups.test.js index 5d333b4661..937df4185d 100644 --- a/test/server_side/controllers/groups.test.js +++ b/test/server_side/controllers/groups.test.js @@ -197,6 +197,19 @@ describe('Groups Controller', function() { expect(res.json).to.be.calledWith(403, 'You cannot leave party during an active quest. Please leave the quest first'); }); + it('prevents quest leader from leaving a party if they have started a quest', function() { + group.quest = { + active: false, + leader: 'user-id' + }; + + groupsController.leave(req, res); + + expect(group.leave).to.not.be.called; + expect(res.json).to.be.calledOnce; + expect(res.json).to.be.calledWith(403, 'You cannot leave when you have started a quest. Abort the quest first.'); + }); + it('leaves party if quest is not active', function() { group.quest = { active: false, diff --git a/website/src/controllers/groups.js b/website/src/controllers/groups.js index 49c7110c53..576c1512a4 100644 --- a/website/src/controllers/groups.js +++ b/website/src/controllers/groups.js @@ -505,8 +505,14 @@ api.leave = function(req, res, next) { var user = res.locals.user; var group = res.locals.group; - if (group.type === 'party' && group.quest && group.quest.active && group.quest.members && group.quest.members[user._id]) { - return res.json(403, 'You cannot leave party during an active quest. Please leave the quest first'); + if (group.type === 'party') { + if (group.quest && group.quest.leader === user._id) { + return res.json(403, 'You cannot leave party when you have started a quest. Abort the quest first.'); + } + + if (group.quest && group.quest.active && group.quest.members && group.quest.members[user._id]) { + return res.json(403, 'You cannot leave party during an active quest. Please leave the quest first'); + } } // When removing the user from challenges, should we keep the tasks?