diff --git a/test/api/v3/integration/debug/POST-debug_quest-progress.test.js b/test/api/v3/integration/debug/POST-debug_quest-progress.test.js new file mode 100644 index 0000000000..3ae3d48882 --- /dev/null +++ b/test/api/v3/integration/debug/POST-debug_quest-progress.test.js @@ -0,0 +1,63 @@ +import nconf from 'nconf'; +import { + generateUser, +} from '../../../../helpers/api-v3-integration.helper'; + +describe('POST /debug/quest-progress', () => { + let user; + + beforeEach(async () => { + user = await generateUser(); + }); + + afterEach(() => { + nconf.set('IS_PROD', false); + }); + + it('errors if user is not on a quest', async () => { + await expect(user.post('/debug/quest-progress')) + .to.eventually.be.rejected.and.to.deep.equal({ + code: 400, + error: 'BadRequest', + message: 'User is not on a valid quest.', + }); + }); + + it('increases boss quest progress by 1000', async () => { + await user.update({ + 'party.quest.key': 'whale', + }); + + await user.post('/debug/quest-progress'); + + await user.sync(); + + expect(user.party.quest.progress.up).to.eql(1000); + }); + + it('increases collection quest progress by 300 items', async () => { + await user.update({ + 'party.quest.key': 'evilsanta2', + }); + + await user.post('/debug/quest-progress'); + + await user.sync(); + + expect(user.party.quest.progress.collect).to.eql({ + tracks: 300, + branches: 300, + }); + }); + + it('returns error when not in production mode', async () => { + nconf.set('IS_PROD', true); + + await expect(user.post('/debug/quest-progress')) + .eventually.be.rejected.and.to.deep.equal({ + code: 404, + error: 'NotFound', + message: 'Not found.', + }); + }); +}); diff --git a/website/client/js/controllers/footerCtrl.js b/website/client/js/controllers/footerCtrl.js index b02ffe0263..2d07aff430 100644 --- a/website/client/js/controllers/footerCtrl.js +++ b/website/client/js/controllers/footerCtrl.js @@ -118,11 +118,15 @@ function($scope, $rootScope, User, $http, Notification, ApiUrl, Social) { }); }; - $scope.addBossQuestProgressUp = function(){ - //@TODO: Route? - User.set({ - 'party.quest.progress.up': User.user.party.quest.progress.up + 1000 - }); + $scope.addQuestProgress = function(){ + $http({ + method: "POST", + url: 'api/v3/debug/quest-progress' + }) + .then(function (response) { + Notification.text('Quest progress increased'); + User.sync(); + }) }; $scope.makeAdmin = function () { diff --git a/website/server/controllers/api-v3/debug.js b/website/server/controllers/api-v3/debug.js index 8c79218a8e..9f6d344546 100644 --- a/website/server/controllers/api-v3/debug.js +++ b/website/server/controllers/api-v3/debug.js @@ -1,5 +1,8 @@ import { authWithHeaders } from '../../middlewares/api-v3/auth'; import ensureDevelpmentMode from '../../middlewares/api-v3/ensureDevelpmentMode'; +import { BadRequest } from '../../libs/api-v3/errors'; +import { content } from '../../../../common'; +import _ from 'lodash'; let api = {}; @@ -141,4 +144,47 @@ api.modifyInventory = { res.respond(200, {}); }, }; + +/** + * @api {post} /api/v3/debug/quest-progress Artificially accelerate quest progress + * @apiDescription Only available in development mode. + * @apiVersion 3.0.0 + * @apiName questProgress + * @apiGroup Development + * + * @apiSuccess {Object} data An empty Object + */ +api.questProgress = { + method: 'POST', + url: '/debug/quest-progress', + middlewares: [ensureDevelpmentMode, authWithHeaders()], + async handler (req, res) { + let user = res.locals.user; + let key = _.get(user, 'party.quest.key'); + let quest = content.quests[key]; + + if (!quest) { + throw new BadRequest('User is not on a valid quest.'); + } + + if (quest.boss) { + user.party.quest.progress.up += 1000; + } + + if (quest.collect) { + let collect = user.party.quest.progress.collect; + _.each(quest.collect, (details, item) => { + collect[item] = collect[item] || 0; + collect[item] += 300; + }); + } + + user.markModified('party.quest.progress'); + + await user.save(); + + res.respond(200, {}); + }, +}; + module.exports = api; diff --git a/website/views/shared/footer.jade b/website/views/shared/footer.jade index 9c67194c85..6246f09cc8 100644 --- a/website/views/shared/footer.jade +++ b/website/views/shared/footer.jade @@ -91,7 +91,7 @@ footer.footer(ng-controller='FooterCtrl') a.btn.btn-default(ng-click='addMana()') +MP a.btn.btn-default(ng-click='addLevelsAndGold()') +Exp +GP +MP a.btn.btn-default(ng-click='addOneLevel()') +1 Level - a.btn.btn-default(ng-click='addBossQuestProgressUp()') +1000 Boss Quest Progress Up + a.btn.btn-default(ng-click='addQuestProgress()' tooltip="+1000 to boss quests. 300 items to collection quests") Quest Progress Up // TODO Re-enable after v3 prod testing // a.btn.btn-default(ng-click='makeAdmin()') Make Admin a.btn.btn-default(ng-click='openModifyInventoryModal()') Modify Inventory