diff --git a/test/api/v3/integration/quests/POST-groups_groupid_quests_abort.test.js b/test/api/v3/integration/quests/POST-groups_groupid_quests_abort.test.js index ec8ce2a216..18f8e24623 100644 --- a/test/api/v3/integration/quests/POST-groups_groupid_quests_abort.test.js +++ b/test/api/v3/integration/quests/POST-groups_groupid_quests_abort.test.js @@ -4,6 +4,7 @@ import { generateUser, } from '../../../../helpers/api-v3-integration.helper'; import { v4 as generateUUID } from 'uuid'; +import { model as Group } from '../../../../../website/server/models/group'; describe('POST /groups/:groupId/quests/abort', () => { let questingGroup; @@ -85,6 +86,7 @@ describe('POST /groups/:groupId/quests/abort', () => { }); it('aborts a quest', async () => { + sandbox.stub(Group.prototype, 'sendChat'); await leader.post(`/groups/${questingGroup._id}/quests/invite/${PET_QUEST}`); await partyMembers[0].post(`/groups/${questingGroup._id}/quests/accept`); await partyMembers[1].post(`/groups/${questingGroup._id}/quests/accept`); @@ -123,5 +125,8 @@ describe('POST /groups/:groupId/quests/abort', () => { }, members: {}, }); + expect(Group.prototype.sendChat).to.be.calledOnce; + expect(Group.prototype.sendChat).to.be.calledWithMatch(/aborted the party quest Wail of the Whale.`/); + Group.prototype.sendChat.restore(); }); }); diff --git a/website/server/controllers/api-v3/quests.js b/website/server/controllers/api-v3/quests.js index 4bb4958322..2502e4bf07 100644 --- a/website/server/controllers/api-v3/quests.js +++ b/website/server/controllers/api-v3/quests.js @@ -412,12 +412,16 @@ api.abortQuest = { let validationErrors = req.validationErrors(); if (validationErrors) throw validationErrors; - let group = await Group.getGroup({user, groupId, fields: 'type quest leader'}); + let group = await Group.getGroup({user, groupId, fields: 'type quest leader chat'}); + if (!group) throw new NotFound(res.t('groupNotFound')); if (group.type !== 'party') throw new NotAuthorized(res.t('guildQuestsNotSupported')); if (!group.quest.active) throw new NotFound(res.t('noActiveQuestToAbort')); if (user._id !== group.leader && user._id !== group.quest.leader) throw new NotAuthorized(res.t('onlyLeaderAbortQuest')); + let questName = questScrolls[group.quest.key].text('en'); + group.sendChat(`\`${user.profile.name} aborted the party quest ${questName}.\``); + let memberUpdates = User.update({ 'party._id': groupId, }, {