diff --git a/common/script/ops/addPushDevice.js b/common/script/ops/addPushDevice.js index fb3946b658..a909fe9feb 100644 --- a/common/script/ops/addPushDevice.js +++ b/common/script/ops/addPushDevice.js @@ -1,6 +1,5 @@ import _ from 'lodash'; import i18n from '../i18n'; -import splitWhitespace from '../libs/splitWhitespace'; import { BadRequest, NotAuthorized, @@ -35,10 +34,8 @@ module.exports = function addPushDevice (user, req = {}) { pushDevices.push(item); - let response = { - data: _.pick(user, splitWhitespace('pushDevices')), - message: i18n.t('pushDeviceAdded', req.language), - }; - - return response; + return [ + user.pushDevices, + i18n.t('pushDeviceAdded', req.language), + ]; }; diff --git a/common/script/ops/addWebhook.js b/common/script/ops/addWebhook.js index 16d63593d2..c308d1b9e5 100644 --- a/common/script/ops/addWebhook.js +++ b/common/script/ops/addWebhook.js @@ -7,8 +7,7 @@ import { import _ from 'lodash'; module.exports = function addWebhook (user, req = {}) { - let wh; - wh = user.preferences.webhooks; + let wh = user.preferences.webhooks; if (!validator.isURL(_.get(req, 'body.url'))) throw new BadRequest(i18n.t('invalidUrl', req.language)); if (!validator.isBoolean(_.get(req, 'body.enabled'))) throw new BadRequest(i18n.t('invalidEnabled', req.language)); @@ -18,9 +17,11 @@ module.exports = function addWebhook (user, req = {}) { if (req.v2 === true) { return user.preferences.webhooks; } else { - return refPush(wh, { - url: req.body.url, - enabled: req.body.enabled, - }); + return [ + refPush(wh, { + url: req.body.url, + enabled: req.body.enabled, + }), + ]; } }; diff --git a/common/script/ops/allocate.js b/common/script/ops/allocate.js index c04c756e45..8e07e09589 100644 --- a/common/script/ops/allocate.js +++ b/common/script/ops/allocate.js @@ -1,5 +1,4 @@ import _ from 'lodash'; -import splitWhitespace from '../libs/splitWhitespace'; import { ATTRIBUTES, } from '../constants'; @@ -26,5 +25,7 @@ module.exports = function allocate (user, req = {}) { throw new NotAuthorized(i18n.t('notEnoughAttrPoints', req.language)); } - return _.pick(user, splitWhitespace('stats')); + return [ + user.stats, + ]; }; diff --git a/common/script/ops/allocateNow.js b/common/script/ops/allocateNow.js index 0db7a3a819..e8ae5d249c 100644 --- a/common/script/ops/allocateNow.js +++ b/common/script/ops/allocateNow.js @@ -8,8 +8,8 @@ module.exports = function allocateNow (user, req = {}) { if (req.v2 === true) { return _.pick(user, 'stats'); } else { - return { - data: _.pick(user, 'stats'), - }; + return [ + user.stats, + ]; } }; diff --git a/common/script/ops/blockUser.js b/common/script/ops/blockUser.js index 3546d412ab..5c123735ed 100644 --- a/common/script/ops/blockUser.js +++ b/common/script/ops/blockUser.js @@ -15,5 +15,7 @@ module.exports = function blockUser (user, req = {}) { } user.markModified('inbox.blocks'); - return user.inbox.blocks; + return [ + user.inbox.blocks, + ]; }; diff --git a/common/script/ops/buyArmoire.js b/common/script/ops/buyArmoire.js index 9b2a8af8e2..e183c06984 100644 --- a/common/script/ops/buyArmoire.js +++ b/common/script/ops/buyArmoire.js @@ -101,16 +101,15 @@ module.exports = function buyArmoire (user, req = {}, analytics) { }); } - let res = { - data: _.pick(user, splitWhitespace('items flags')), - message, - }; - - if (armoireResp) res.armoire = armoireResp; + let resData = _.pick(user, splitWhitespace('items flags')); + if (armoireResp) resData.armoire = armoireResp; if (req.v2 === true) { - return res.data; + return resData; } else { - return res; + return [ + resData, + message, + ]; } }; diff --git a/common/script/ops/buyGear.js b/common/script/ops/buyGear.js index 2bad8135cd..e4f4eb3b68 100644 --- a/common/script/ops/buyGear.js +++ b/common/script/ops/buyGear.js @@ -59,14 +59,12 @@ module.exports = function buyGear (user, req = {}, analytics) { }); } - let res = { - data: _.pick(user, splitWhitespace('items achievements stats flags')), - message, - }; - if (req.v2 === true) { - return res.data; + return _.pick(user, splitWhitespace('items achievements stats flags')); } else { - return res; + return [ + _.pick(user, splitWhitespace('items achievements stats flags')), + message, + ]; } }; diff --git a/common/script/ops/buyMysterySet.js b/common/script/ops/buyMysterySet.js index cc2eb8f3b1..acf0014279 100644 --- a/common/script/ops/buyMysterySet.js +++ b/common/script/ops/buyMysterySet.js @@ -47,9 +47,9 @@ module.exports = function buyMysterySet (user, req = {}, analytics) { if (req.v2 === true) { return pickDeep(user, splitWhitespace('items purchased.plan.consecutive')); } else { - return { - data: pickDeep(user, splitWhitespace('items purchased.plan.consecutive')), - message: i18n.t('hourglassPurchaseSet', req.language), - }; + return [ + { items: user.items, purchasedPlanConsecutive: user.purchased.plan.consecutive }, + i18n.t('hourglassPurchaseSet', req.language), + ]; } }; diff --git a/common/script/ops/buyPotion.js b/common/script/ops/buyPotion.js index f797ff903b..5c64b19609 100644 --- a/common/script/ops/buyPotion.js +++ b/common/script/ops/buyPotion.js @@ -1,7 +1,5 @@ import content from '../content/index'; import i18n from '../i18n'; -import _ from 'lodash'; -import splitWhitespace from '../libs/splitWhitespace'; import { NotAuthorized, } from '../libs/errors'; @@ -39,14 +37,12 @@ module.exports = function buyPotion (user, req = {}, analytics) { }); } - let res = { - data: _.pick(user, splitWhitespace('stats')), - message, - }; - if (req.v2 === true) { - return res.data; + return user.stats; } else { - return res; + return [ + user.stats, + message, + ]; } }; diff --git a/common/script/ops/buyQuest.js b/common/script/ops/buyQuest.js index 6cab422063..af7c384419 100644 --- a/common/script/ops/buyQuest.js +++ b/common/script/ops/buyQuest.js @@ -40,11 +40,11 @@ module.exports = function buyQuest (user, req = {}, analytics) { if (req.v2 === true) { return user.items.quests; } else { - return { - data: user.items.quests, - message: i18n.t('messageBought', { + return [ + user.items.quests, + i18n.t('messageBought', { itemText: item.text(req.language), }, req.language), - }; + ]; } }; diff --git a/common/script/ops/buySpecialSpell.js b/common/script/ops/buySpecialSpell.js index 921ffc817b..20ea0251aa 100644 --- a/common/script/ops/buySpecialSpell.js +++ b/common/script/ops/buySpecialSpell.js @@ -25,11 +25,11 @@ module.exports = function buySpecialSpell (user, req = {}) { if (req.v2 === true) { return _.pick(user, splitWhitespace('items stats')); } else { - return { - data: _.pick(user, splitWhitespace('items stats')), - message: i18n.t('messageBought', { + return [ + _.pick(user, splitWhitespace('items stats')), + i18n.t('messageBought', { itemText: item.text(req.language), }, req.language), - }; + ]; } }; diff --git a/common/script/ops/changeClass.js b/common/script/ops/changeClass.js index 520a435ace..4b3eb6b289 100644 --- a/common/script/ops/changeClass.js +++ b/common/script/ops/changeClass.js @@ -71,8 +71,8 @@ module.exports = function changeClass (user, req = {}, analytics) { if (req.v2 === true) { return _.pick(user, splitWhitespace('stats flags items preferences')); } else { - return { - data: _.pick(user, splitWhitespace('stats flags items preferences')), - }; + return [ + _.pick(user, splitWhitespace('stats flags items preferences')), + ]; } }; diff --git a/common/script/ops/clearPMs.js b/common/script/ops/clearPMs.js index 5187354dfc..765ecc3b56 100644 --- a/common/script/ops/clearPMs.js +++ b/common/script/ops/clearPMs.js @@ -1,5 +1,7 @@ module.exports = function clearPMs (user) { user.inbox.messages = {}; user.markModified('inbox.messages'); - return user.inbox.messages; + return [ + user.inbox.messages, + ]; }; diff --git a/common/script/ops/deletePM.js b/common/script/ops/deletePM.js index 826cf9ee1a..84bb7ee33a 100644 --- a/common/script/ops/deletePM.js +++ b/common/script/ops/deletePM.js @@ -3,5 +3,7 @@ import _ from 'lodash'; module.exports = function deletePM (user, req = {}) { delete user.inbox.messages[_.get(req, 'params.id')]; user.markModified(`inbox.messages.${req.params.id}`); - return user.inbox.messages; + return [ + user.inbox.messages, + ]; }; diff --git a/common/script/ops/deleteWebhook.js b/common/script/ops/deleteWebhook.js index 51e94982d4..9c4f67eba8 100644 --- a/common/script/ops/deleteWebhook.js +++ b/common/script/ops/deleteWebhook.js @@ -4,5 +4,7 @@ module.exports = function deleteWebhook (user, req) { delete user.preferences.webhooks[_.get(req, 'params.id')]; user.markModified('preferences.webhooks'); - return user.preferences.webhooks; + return [ + user.preferences.webhooks, + ]; }; diff --git a/common/script/ops/disableClasses.js b/common/script/ops/disableClasses.js index 58f493a13c..e611bb0872 100644 --- a/common/script/ops/disableClasses.js +++ b/common/script/ops/disableClasses.js @@ -13,8 +13,8 @@ module.exports = function disableClasses (user, req = {}) { if (req.v2 === true) { return _.pick(user, splitWhitespace('stats flags preferences')); } else { - return { - data: _.pick(user, splitWhitespace('stats flags preferences')), - }; + return [ + _.pick(user, splitWhitespace('stats flags preferences')), + ]; } }; diff --git a/common/script/ops/equip.js b/common/script/ops/equip.js index ddef7c5483..9c614915a7 100644 --- a/common/script/ops/equip.js +++ b/common/script/ops/equip.js @@ -58,14 +58,11 @@ module.exports = function equip (user, req = {}) { } } - let res = { - data: user.items, - }; - if (message) res.message = message; - if (req.v2 === true) { return user.items; } else { + let res = [user.items]; + if (message) res.push(message); return res; } }; diff --git a/common/script/ops/feed.js b/common/script/ops/feed.js index f555a24dfc..dc06226cf0 100644 --- a/common/script/ops/feed.js +++ b/common/script/ops/feed.js @@ -94,9 +94,9 @@ module.exports = function feed (user, req = {}) { value: userPets[pet], }; } else { - return { - data: userPets[pet], + return [ + userPets[pet], message, - }; + ]; } }; diff --git a/common/script/ops/hatch.js b/common/script/ops/hatch.js index 01b0b68520..87adbf3276 100644 --- a/common/script/ops/hatch.js +++ b/common/script/ops/hatch.js @@ -36,9 +36,9 @@ module.exports = function hatch (user, req = {}) { if (req.v2 === true) { return user.items; } else { - return { - message: i18n.t('messageHatched', req.language), - data: user.items, - }; + return [ + user.items, + i18n.t('messageHatched', req.language), + ]; } }; diff --git a/common/script/ops/hourglassPurchase.js b/common/script/ops/hourglassPurchase.js index 286590517a..e1d07bb482 100644 --- a/common/script/ops/hourglassPurchase.js +++ b/common/script/ops/hourglassPurchase.js @@ -1,12 +1,11 @@ import content from '../content/index'; import i18n from '../i18n'; import _ from 'lodash'; -import splitWhitespace from '../libs/splitWhitespace'; -import pickDeep from '../libs/pickDeep'; import { BadRequest, NotAuthorized, } from '../libs/errors'; +import splitWhitespace from '../libs/splitWhitespace'; module.exports = function purchaseHourglass (user, req = {}, analytics) { let key = _.get(req, 'params.key'); @@ -51,14 +50,12 @@ module.exports = function purchaseHourglass (user, req = {}, analytics) { }); } - let res = { - data: pickDeep(user, splitWhitespace('items purchased.plan.consecutive')), - message: i18n.t('hourglassPurchase', req.language), - }; - if (req.v2 === true) { - return res.data; + return _.pick(user, splitWhitespace('items purchased.plan.consecutive')); } else { - return res; + return [ + { items: user.items, purchasedPlanConsecutive: user.purchased.plan.consecutive }, + i18n.t('hourglassPurchase', req.language), + ]; } }; diff --git a/common/script/ops/openMysteryItem.js b/common/script/ops/openMysteryItem.js index dc270cace9..743104c48b 100644 --- a/common/script/ops/openMysteryItem.js +++ b/common/script/ops/openMysteryItem.js @@ -36,9 +36,9 @@ module.exports = function openMysteryItem (user, req = {}, analytics) { if (req.v2 === true) { return user.items.gear.owned; } else { - return { - message: i18n.t('mysteryItemOpened', req.language), - data: user.items.gear.owned, - }; + return [ + user.items.gear.owned, + i18n.t('mysteryItemOpened', req.language), + ]; } }; diff --git a/common/script/ops/purchase.js b/common/script/ops/purchase.js index b4a7136646..bb5a71df80 100644 --- a/common/script/ops/purchase.js +++ b/common/script/ops/purchase.js @@ -54,12 +54,10 @@ module.exports = function purchase (user, req = {}, analytics) { }); } - let response = { - data: _.pick(user, splitWhitespace('stats balance')), - message: i18n.t('plusOneGem'), - }; - - return response; + return [ + _.pick(user, splitWhitespace('stats balance')), + i18n.t('plusOneGem'), + ]; } let acceptedTypes = ['eggs', 'hatchingPotions', 'food', 'quests', 'gear']; @@ -119,14 +117,12 @@ module.exports = function purchase (user, req = {}, analytics) { }); } - let response = { - data: _.pick(user, splitWhitespace('items balance')), - message: i18n.t('purchased', {type, key}), - }; - if (req.v2 === true) { - return response.data; + return _.pick(user, splitWhitespace('items balance')); } else { - return response; + return [ + _.pick(user, splitWhitespace('items balance')), + i18n.t('purchased', {type, key}), + ]; } }; diff --git a/common/script/ops/readCard.js b/common/script/ops/readCard.js index d943e40a35..57b0da4b00 100644 --- a/common/script/ops/readCard.js +++ b/common/script/ops/readCard.js @@ -24,9 +24,9 @@ module.exports = function readCard (user, req = {}) { if (req.v2 === true) { return _.pick(user, splitWhitespace('items.special flags.cardReceived')); } else { - return { - message: i18n.t('readCard', {cardType}, req.language), - data: _.pick(user, splitWhitespace('items.special flags.cardReceived')), - }; + return [ + { specialItems: user.items.special, cardReceived: user.flags.cardReceived }, + i18n.t('readCard', {cardType}, req.language), + ]; } }; diff --git a/common/script/ops/rebirth.js b/common/script/ops/rebirth.js index bf29e64d67..c7de4ac356 100644 --- a/common/script/ops/rebirth.js +++ b/common/script/ops/rebirth.js @@ -98,14 +98,12 @@ module.exports = function rebirth (user, tasks = [], req = {}, analytics) { user.stats.buffs = {}; - let response = { - data: user, - message: i18n.t('rebirthComplete'), - }; - if (req.v2 === true) { return user; } else { - return response; + return [ + user, + i18n.t('rebirthComplete'), + ]; } }; diff --git a/common/script/ops/releaseBoth.js b/common/script/ops/releaseBoth.js index cc17b99e44..cf7d2267ca 100644 --- a/common/script/ops/releaseBoth.js +++ b/common/script/ops/releaseBoth.js @@ -57,14 +57,12 @@ module.exports = function releaseBoth (user, req = {}, analytics) { user.achievements.triadBingoCount++; } - let response = { - data: _.pick(user, splitWhitespace('achievements')), - message: i18n.t('mountsAndPetsReleased'), - }; - if (req.v2 === true) { return user; } else { - return response; + return [ + _.pick(user, splitWhitespace('achievements items balance')), + i18n.t('mountsAndPetsReleased'), + ]; } }; diff --git a/common/script/ops/releaseMounts.js b/common/script/ops/releaseMounts.js index a0564dc804..d8b8dde659 100644 --- a/common/script/ops/releaseMounts.js +++ b/common/script/ops/releaseMounts.js @@ -3,8 +3,6 @@ import i18n from '../i18n'; import { NotAuthorized, } from '../libs/errors'; -import splitWhitespace from '../libs/splitWhitespace'; -import _ from 'lodash'; module.exports = function releaseMounts (user, req = {}, analytics) { let mount; @@ -34,14 +32,12 @@ module.exports = function releaseMounts (user, req = {}, analytics) { }); } - let response = { - data: _.pick(user, splitWhitespace('mounts')), - message: i18n.t('mountsReleased'), - }; - if (req.v2 === true) { return user; } else { - return response; + return [ + user.items.mounts, + i18n.t('mountsReleased'), + ]; } }; diff --git a/common/script/ops/releasePets.js b/common/script/ops/releasePets.js index 09303b34e9..9466e1ccda 100644 --- a/common/script/ops/releasePets.js +++ b/common/script/ops/releasePets.js @@ -3,8 +3,6 @@ import i18n from '../i18n'; import { NotAuthorized, } from '../libs/errors'; -import splitWhitespace from '../libs/splitWhitespace'; -import _ from 'lodash'; module.exports = function releasePets (user, req = {}, analytics) { if (user.balance < 1) { @@ -32,14 +30,12 @@ module.exports = function releasePets (user, req = {}, analytics) { }); } - let response = { - data: _.pick(user, splitWhitespace('user.items.pets')), - message: i18n.t('petsReleased'), - }; - if (req.v2 === true) { return user; } else { - return response; + return [ + user.items.pets, + i18n.t('petsReleased'), + ]; } }; diff --git a/common/script/ops/reroll.js b/common/script/ops/reroll.js index 52939551b3..fee26fb88b 100644 --- a/common/script/ops/reroll.js +++ b/common/script/ops/reroll.js @@ -27,14 +27,12 @@ module.exports = function reroll (user, tasks = [], req = {}, analytics) { }); } - let response = { - data: {user, tasks}, - message: i18n.t('rerollComplete'), - }; - if (req.v2 === true) { return user; } else { - return response; + return [ + {user, tasks}, + i18n.t('rerollComplete'), + ]; } }; diff --git a/common/script/ops/reset.js b/common/script/ops/reset.js index 1e59ccf02a..eb8d25033e 100644 --- a/common/script/ops/reset.js +++ b/common/script/ops/reset.js @@ -19,14 +19,12 @@ module.exports = function reset (user, tasks = [], req = {}) { resetGear(user); - let response = { - data: {user, tasksToRemove}, - message: i18n.t('resetComplete'), - }; - if (req.v2 === true) { return user; } else { - return response; + return [ + {user, tasksToRemove}, + i18n.t('resetComplete'), + ]; } }; diff --git a/common/script/ops/revive.js b/common/script/ops/revive.js index 5b48e6fb71..30b29a78fc 100644 --- a/common/script/ops/revive.js +++ b/common/script/ops/revive.js @@ -4,7 +4,6 @@ import _ from 'lodash'; import { NotAuthorized, } from '../libs/errors'; -import splitWhitespace from '../libs/splitWhitespace'; import randomVal from '../fns/randomVal'; module.exports = function revive (user, req = {}, analytics) { @@ -97,14 +96,12 @@ module.exports = function revive (user, req = {}, analytics) { }); } - let response = { - data: _.pick(user, splitWhitespace('user.items')), - message, - }; - if (req.v2 === true) { return user; } else { - return response; + return [ + user.items, + message, + ]; } }; diff --git a/common/script/ops/scoreTask.js b/common/script/ops/scoreTask.js index ba0ca42c47..bfc99344a9 100644 --- a/common/script/ops/scoreTask.js +++ b/common/script/ops/scoreTask.js @@ -257,5 +257,5 @@ module.exports = function scoreTask (options = {}, req = {}) { } updateStats(user, stats, req); - return delta; + return [delta]; }; diff --git a/common/script/ops/sell.js b/common/script/ops/sell.js index fc3aa9632b..ccde6c552e 100644 --- a/common/script/ops/sell.js +++ b/common/script/ops/sell.js @@ -33,14 +33,12 @@ module.exports = function sell (user, req = {}) { user.items[type][key]--; user.stats.gp += content[type][key].value; - let response = { - data: _.pick(user, splitWhitespace('stats items')), - message: i18n.t('sold', {type, key}), - }; - if (req.v2 === true) { - return response.data; + return _.pick(user, splitWhitespace('stats items')); } else { - return response; + return [ + _.pick(user, splitWhitespace('stats items')), + i18n.t('sold', {type, key}), + ]; } }; diff --git a/common/script/ops/sleep.js b/common/script/ops/sleep.js index 8ef48eeac4..1a531ecb88 100644 --- a/common/script/ops/sleep.js +++ b/common/script/ops/sleep.js @@ -4,10 +4,6 @@ module.exports = function sleep (user, req = {}) { if (req.v2 === true) { return {}; } else { - return { - preferences: { - sleep: user.preferences.sleep, - }, - }; + return [user.preferences.sleep]; } }; diff --git a/common/script/ops/unlock.js b/common/script/ops/unlock.js index 08ec175dcc..d65131aa82 100644 --- a/common/script/ops/unlock.js +++ b/common/script/ops/unlock.js @@ -75,14 +75,12 @@ module.exports = function unlock (user, req = {}, analytics) { }); } - let response = { - data: _.pick(user, splitWhitespace('purchased preferences items')), - message: i18n.t('unlocked'), - }; - if (req.v2 === true) { - return response.data; + return _.pick(user, splitWhitespace('purchased preferences items')); } else { - return response; + return [ + _.pick(user, splitWhitespace('purchased preferences items')), + i18n.t('unlocked'), + ]; } }; diff --git a/common/script/ops/updateTask.js b/common/script/ops/updateTask.js index a128b40fc1..b6dd9f0f90 100644 --- a/common/script/ops/updateTask.js +++ b/common/script/ops/updateTask.js @@ -22,5 +22,5 @@ module.exports = function updateTask (task, req = {}) { _.merge(task, _.omit(req.body, ['_id', 'id', 'type'])); - return task; + return [task]; }; diff --git a/common/script/ops/updateWebhook.js b/common/script/ops/updateWebhook.js index d8ec977308..63fed89b17 100644 --- a/common/script/ops/updateWebhook.js +++ b/common/script/ops/updateWebhook.js @@ -15,6 +15,6 @@ module.exports = function updateWebhook (user, req) { if (req.v2 === true) { return user.preferences.webhooks; } else { - return user.preferences.webhooks[req.params.id]; + return [user.preferences.webhooks[req.params.id]]; } }; diff --git a/test/api/v3/integration/user/POST-user_allocate.test.js b/test/api/v3/integration/user/POST-user_allocate.test.js index d213318534..02d4990092 100644 --- a/test/api/v3/integration/user/POST-user_allocate.test.js +++ b/test/api/v3/integration/user/POST-user_allocate.test.js @@ -36,6 +36,6 @@ describe('POST /user/allocate', () => { await user.sync(); expect(user.stats.con).to.equal(1); expect(user.stats.points).to.equal(0); - expect(res.stats.con).to.equal(1); + expect(res.con).to.equal(1); }); }); diff --git a/test/api/v3/integration/user/POST-user_allocate_now.test.js b/test/api/v3/integration/user/POST-user_allocate_now.test.js index 668c85610e..b45f2156be 100644 --- a/test/api/v3/integration/user/POST-user_allocate_now.test.js +++ b/test/api/v3/integration/user/POST-user_allocate_now.test.js @@ -18,11 +18,7 @@ describe('POST /user/allocate-now', () => { let res = await user.post('/user/allocate-now'); await user.sync(); - expect(res).to.eql({ - data: { - stats: user.stats, - }, - }); + expect(res).to.eql(user.stats); expect(user.stats.points).to.equal(0); expect(user.stats.con).to.equal(9); expect(user.stats.int).to.equal(8); diff --git a/test/api/v3/integration/user/POST-user_buy.test.js b/test/api/v3/integration/user/POST-user_buy.test.js index 08e20617f0..2478adf7f8 100644 --- a/test/api/v3/integration/user/POST-user_buy.test.js +++ b/test/api/v3/integration/user/POST-user_buy.test.js @@ -36,9 +36,7 @@ describe('POST /user/buy/:key', () => { await user.sync(); expect(user.stats.hp).to.equal(50); - expect(res.data).to.eql({ - stats: user.stats, - }); + expect(res.data).to.eql(user.stats); expect(res.message).to.equal(t('messageBought', {itemText: potion.text()})); }); diff --git a/test/api/v3/integration/user/POST-user_buy_mystery_set.test.js b/test/api/v3/integration/user/POST-user_buy_mystery_set.test.js index 306f1e6677..da7116d732 100644 --- a/test/api/v3/integration/user/POST-user_buy_mystery_set.test.js +++ b/test/api/v3/integration/user/POST-user_buy_mystery_set.test.js @@ -31,11 +31,7 @@ describe('POST /user/buy-mystery-set/:key', () => { expect(res.data).to.eql({ items: JSON.parse(JSON.stringify(user.items)), // otherwise dates can't be compared - purchased: { - plan: { - consecutive: user.purchased.plan.consecutive, - }, - }, + purchasedPlanConsecutive: user.purchased.plan.consecutive, }); expect(res.message).to.equal(t('hourglassPurchaseSet')); }); diff --git a/test/api/v3/integration/user/POST-user_buy_potion.test.js b/test/api/v3/integration/user/POST-user_buy_potion.test.js index 4616ae8f34..e37f908e3e 100644 --- a/test/api/v3/integration/user/POST-user_buy_potion.test.js +++ b/test/api/v3/integration/user/POST-user_buy_potion.test.js @@ -36,9 +36,7 @@ describe('POST /user/buy-potion', () => { await user.sync(); expect(user.stats.hp).to.equal(50); - expect(res.data).to.eql({ - stats: user.stats, - }); + expect(res.data).to.eql(user.stats); expect(res.message).to.equal(t('messageBought', {itemText: potion.text()})); }); }); diff --git a/test/api/v3/integration/user/POST-user_change-class.test.js b/test/api/v3/integration/user/POST-user_change-class.test.js index a849ca9382..d4b4192f23 100644 --- a/test/api/v3/integration/user/POST-user_change-class.test.js +++ b/test/api/v3/integration/user/POST-user_change-class.test.js @@ -18,13 +18,13 @@ describe('POST /user/change-class', () => { let res = await user.post('/user/change-class?class=rogue'); await user.sync(); - expect(res).to.eql({ - data: JSON.parse(JSON.stringify({ + expect(res).to.eql(JSON.parse( + JSON.stringify({ preferences: user.preferences, stats: user.stats, flags: user.flags, items: user.items, - })), - }); + }) + )); }); }); diff --git a/test/api/v3/integration/user/POST-user_disable-classes.test.js b/test/api/v3/integration/user/POST-user_disable-classes.test.js index 3c0a88a3ab..0632a8adc7 100644 --- a/test/api/v3/integration/user/POST-user_disable-classes.test.js +++ b/test/api/v3/integration/user/POST-user_disable-classes.test.js @@ -15,12 +15,12 @@ describe('POST /user/disable-classes', () => { let res = await user.post('/user/disable-classes'); await user.sync(); - expect(res).to.eql({ - data: JSON.parse(JSON.stringify({ + expect(res).to.eql(JSON.parse( + JSON.stringify({ preferences: user.preferences, stats: user.stats, flags: user.flags, - })), - }); + }) + )); }); }); diff --git a/test/api/v3/integration/user/POST-user_equip_type_key.test.js b/test/api/v3/integration/user/POST-user_equip_type_key.test.js index f1d697cda7..c5cde777df 100644 --- a/test/api/v3/integration/user/POST-user_equip_type_key.test.js +++ b/test/api/v3/integration/user/POST-user_equip_type_key.test.js @@ -35,8 +35,6 @@ describe('POST /user/equip/:type/:key', () => { let res = await user.post('/user/equip/equipped/weapon_warrior_2'); await user.sync(); - expect(res).to.eql({ - data: JSON.parse(JSON.stringify(user.items)), - }); + expect(res).to.eql(JSON.parse(JSON.stringify(user.items))); }); }); diff --git a/test/api/v3/integration/user/POST-user_sleep.test.js b/test/api/v3/integration/user/POST-user_sleep.test.js index da95ae97b0..0e9773150e 100644 --- a/test/api/v3/integration/user/POST-user_sleep.test.js +++ b/test/api/v3/integration/user/POST-user_sleep.test.js @@ -13,16 +13,12 @@ describe('POST /user/sleep', () => { it('toggles sleep status', async () => { let res = await user.post('/user/sleep'); - expect(res).to.eql({ - preferences: {sleep: true}, - }); + expect(res).to.eql(true); await user.sync(); expect(user.preferences.sleep).to.be.true; let res2 = await user.post('/user/sleep'); - expect(res2).to.eql({ - preferences: {sleep: false}, - }); + expect(res2).to.eql(false); await user.sync(); expect(user.preferences.sleep).to.be.false; }); diff --git a/test/api/v3/integration/user/auth/POST-user_reset_password.test.js b/test/api/v3/integration/user/auth/POST-user_reset_password.test.js index 6116f67a35..773d199db6 100644 --- a/test/api/v3/integration/user/auth/POST-user_reset_password.test.js +++ b/test/api/v3/integration/user/auth/POST-user_reset_password.test.js @@ -16,7 +16,7 @@ describe('POST /user/reset-password', async () => { let response = await user.post(endpoint, { email: user.auth.local.email, }); - expect(response).to.eql({ message: t('passwordReset') }); + expect(response).to.eql({ data: {}, message: t('passwordReset') }); await user.sync(); expect(user.auth.local.hashed_password).to.not.eql(previousPassword); }); @@ -25,7 +25,7 @@ describe('POST /user/reset-password', async () => { let response = await user.post(endpoint, { email: 'nonExistent@email.com', }); - expect(response).to.eql({ message: t('passwordReset') }); + expect(response).to.eql({ data: {}, message: t('passwordReset') }); }); it('errors if email is not provided', async () => { @@ -36,4 +36,3 @@ describe('POST /user/reset-password', async () => { }); }); }); - diff --git a/test/api/v3/unit/middlewares/response.js b/test/api/v3/unit/middlewares/response.js index 296a216ec2..e46da348c0 100644 --- a/test/api/v3/unit/middlewares/response.js +++ b/test/api/v3/unit/middlewares/response.js @@ -35,6 +35,21 @@ describe('response middleware', () => { }); }); + it('can be passed a third parameter to be used as optional message', () => { + responseMiddleware(req, res, next); + res.respond(200, {field: 1}, 'hello'); + + expect(res.status).to.be.calledOnce; + expect(res.json).to.be.calledOnce; + + expect(res.status).to.be.calledWith(200); + expect(res.json).to.be.calledWith({ + success: true, + data: {field: 1}, + message: 'hello', + }); + }); + it('treats status >= 400 as failures', () => { responseMiddleware(req, res, next); res.respond(403, {field: 1}); diff --git a/test/api/v3/unit/models/challenge.test.js b/test/api/v3/unit/models/challenge.test.js index e3577a0e2a..00332761f4 100644 --- a/test/api/v3/unit/models/challenge.test.js +++ b/test/api/v3/unit/models/challenge.test.js @@ -110,7 +110,7 @@ describe('Challenge Model', () => { }; Tasks.Task.sanitize(req.body); - _.assign(task, common.ops.updateTask(task.toObject(), req)); + _.assign(task, common.ops.updateTask(task.toObject(), req)[0]); await challenge.updateTask(task); diff --git a/test/common/ops/addPushDevice.js b/test/common/ops/addPushDevice.js index 854977b71d..535d288384 100644 --- a/test/common/ops/addPushDevice.js +++ b/test/common/ops/addPushDevice.js @@ -39,9 +39,9 @@ describe('shared.ops.addPushDevice', () => { }); it('adds a push device', () => { - let response = addPushDevice(user, {body: {regId, type}}); + let [, message] = addPushDevice(user, {body: {regId, type}}); - expect(response.message).to.equal(i18n.t('pushDeviceAdded')); + expect(message).to.equal(i18n.t('pushDeviceAdded')); expect(user.pushDevices[0].type).to.equal(type); expect(user.pushDevices[0].regId).to.equal(regId); }); diff --git a/test/common/ops/allocateNow.js b/test/common/ops/allocateNow.js index 21a7f6daf4..4fe473ec9e 100644 --- a/test/common/ops/allocateNow.js +++ b/test/common/ops/allocateNow.js @@ -18,17 +18,13 @@ describe('shared.ops.allocateNow', () => { user.stats.str = 9; user.preferences.allocationMode = 'flat'; - let res = allocateNow(user); + let [data] = allocateNow(user); expect(user.stats.points).to.equal(0); expect(user.stats.con).to.equal(9); expect(user.stats.int).to.equal(8); expect(user.stats.per).to.equal(9); expect(user.stats.str).to.equal(9); - expect(res).to.eql({ - data: { - stats: user.stats, - }, - }); + expect(data).to.eql(user.stats); }); }); diff --git a/test/common/ops/blockUser.test.js b/test/common/ops/blockUser.test.js index 01b5185ed0..950af25d0c 100644 --- a/test/common/ops/blockUser.test.js +++ b/test/common/ops/blockUser.test.js @@ -26,10 +26,10 @@ describe('shared.ops.blockUser', () => { }); it('blocks user', () => { - let result = blockUser(user, { params: { uuid: blockedUser._id } }); + let [result] = blockUser(user, { params: { uuid: blockedUser._id } }); expect(user.inbox.blocks).to.eql([blockedUser._id]); expect(result).to.eql([blockedUser._id]); - result = blockUser(user, { params: { uuid: blockedUser2._id } }); + [result] = blockUser(user, { params: { uuid: blockedUser2._id } }); expect(user.inbox.blocks).to.eql([blockedUser._id, blockedUser2._id]); expect(result).to.eql([blockedUser._id, blockedUser2._id]); }); @@ -37,7 +37,7 @@ describe('shared.ops.blockUser', () => { it('blocks, then unblocks user', () => { blockUser(user, { params: { uuid: blockedUser._id } }); expect(user.inbox.blocks).to.eql([blockedUser._id]); - let result = blockUser(user, { params: { uuid: blockedUser._id } }); + let [result] = blockUser(user, { params: { uuid: blockedUser._id } }); expect(user.inbox.blocks).to.eql([]); expect(result).to.eql([]); }); diff --git a/test/common/ops/buySpecialSpell.js b/test/common/ops/buySpecialSpell.js index f688f4d3d4..249f4bc8a6 100644 --- a/test/common/ops/buySpecialSpell.js +++ b/test/common/ops/buySpecialSpell.js @@ -60,7 +60,7 @@ describe('shared.ops.buySpecialSpell', () => { user.stats.gp = 11; let item = content.special.thankyou; - let res = buySpecialSpell(user, { + let [data, message] = buySpecialSpell(user, { params: { key: 'thankyou', }, @@ -68,11 +68,11 @@ describe('shared.ops.buySpecialSpell', () => { expect(user.stats.gp).to.equal(1); expect(user.items.special.thankyou).to.equal(1); - expect(res.data).to.eql({ + expect(data).to.eql({ items: user.items, stats: user.stats, }); - expect(res.message).to.equal(i18n.t('messageBought', { + expect(message).to.equal(i18n.t('messageBought', { itemText: item.text(), })); }); diff --git a/test/common/ops/changeClass.js b/test/common/ops/changeClass.js index 498dde18f2..ae4a180178 100644 --- a/test/common/ops/changeClass.js +++ b/test/common/ops/changeClass.js @@ -46,14 +46,12 @@ describe('shared.ops.changeClass', () => { user.stats.class = 'healer'; user.items.gear.owned.armor_rogue_1 = true; // eslint-disable-line camelcase - let res = changeClass(user, {query: {class: 'rogue'}}); - expect(res).to.eql({ - data: { - preferences: user.preferences, - stats: user.stats, - flags: user.flags, - items: user.items, - }, + let [data] = changeClass(user, {query: {class: 'rogue'}}); + expect(data).to.eql({ + preferences: user.preferences, + stats: user.stats, + flags: user.flags, + items: user.items, }); expect(user.stats.class).to.equal('rogue'); @@ -80,14 +78,12 @@ describe('shared.ops.changeClass', () => { user.stats.int = 4; user.flags.classSelected = true; - let res = changeClass(user); - expect(res).to.eql({ - data: { - preferences: user.preferences, - stats: user.stats, - flags: user.flags, - items: user.items, - }, + let [data] = changeClass(user); + expect(data).to.eql({ + preferences: user.preferences, + stats: user.stats, + flags: user.flags, + items: user.items, }); expect(user.preferences.disableClasses).to.be.false; @@ -122,14 +118,12 @@ describe('shared.ops.changeClass', () => { user.stats.int = 4; user.flags.classSelected = true; - let res = changeClass(user); - expect(res).to.eql({ - data: { - preferences: user.preferences, - stats: user.stats, - flags: user.flags, - items: user.items, - }, + let [data] = changeClass(user); + expect(data).to.eql({ + preferences: user.preferences, + stats: user.stats, + flags: user.flags, + items: user.items, }); expect(user.balance).to.equal(0.25); diff --git a/test/common/ops/clearPMs.test.js b/test/common/ops/clearPMs.test.js index a2ff2a7a0b..cf1408e5a6 100644 --- a/test/common/ops/clearPMs.test.js +++ b/test/common/ops/clearPMs.test.js @@ -13,7 +13,7 @@ describe('shared.ops.clearPMs', () => { it('clears messages', () => { expect(user.inbox.messages).to.not.eql({}); - let result = clearPMs(user); + let [result] = clearPMs(user); expect(user.inbox.messages).to.eql({}); expect(result).to.eql({}); }); diff --git a/test/common/ops/deletePM.test.js b/test/common/ops/deletePM.test.js index 472bede6a3..109595eca9 100644 --- a/test/common/ops/deletePM.test.js +++ b/test/common/ops/deletePM.test.js @@ -3,7 +3,7 @@ import { generateUser, } from '../../helpers/common.helper'; -describe('shared.ops.clearPMs', () => { +describe('shared.ops.deletePM', () => { let user; beforeEach(() => { @@ -13,7 +13,7 @@ describe('shared.ops.clearPMs', () => { it('delete message', () => { expect(user.inbox.messages).to.not.eql({ second: 'message' }); - let response = deletePM(user, { params: { id: 'first' } }); + let [response] = deletePM(user, { params: { id: 'first' } }); expect(user.inbox.messages).to.eql({ second: 'message' }); expect(response).to.eql({ second: 'message' }); }); diff --git a/test/common/ops/deleteWebhook.test.js b/test/common/ops/deleteWebhook.test.js index e72bf22269..8e27a09e3e 100644 --- a/test/common/ops/deleteWebhook.test.js +++ b/test/common/ops/deleteWebhook.test.js @@ -14,8 +14,8 @@ describe('shared.ops.deleteWebhook', () => { it('succeeds', () => { user.preferences.webhooks = { 'some-id': {}, 'another-id': {} }; - let res = deleteWebhook(user, req); + let [data] = deleteWebhook(user, req); expect(user.preferences.webhooks).to.eql({'another-id': {}}); - expect(res).to.equal(user.preferences.webhooks); + expect(data).to.equal(user.preferences.webhooks); }); }); diff --git a/test/common/ops/disableClasses.js b/test/common/ops/disableClasses.js index 59f0643c65..81ac1a9792 100644 --- a/test/common/ops/disableClasses.js +++ b/test/common/ops/disableClasses.js @@ -18,13 +18,11 @@ describe('shared.ops.disableClasses', () => { user.preferences.autoAllocate = false; user.stats.points = 2; - let res = disableClasses(user); - expect(res).to.eql({ - data: { - preferences: user.preferences, - stats: user.stats, - flags: user.flags, - }, + let [data] = disableClasses(user); + expect(data).to.eql({ + preferences: user.preferences, + stats: user.stats, + flags: user.flags, }); expect(user.stats.class).to.equal('warrior'); diff --git a/test/common/ops/equip.js b/test/common/ops/equip.js index 77110f7f40..8641aa102e 100644 --- a/test/common/ops/equip.js +++ b/test/common/ops/equip.js @@ -37,20 +37,20 @@ describe('shared.ops.equip', () => { equip(user, {params: {key: 'weapon_warrior_1'}}); // one-handed to one-handed - let res = equip(user, {params: {key: 'weapon_warrior_2'}}); - expect(res.message).to.not.exists; + let [, message] = equip(user, {params: {key: 'weapon_warrior_2'}}); + expect(message).to.not.exists; // one-handed to two-handed - res = equip(user, {params: {key: 'weapon_wizard_1'}}); - expect(res.message).to.not.exists; + [, message] = equip(user, {params: {key: 'weapon_wizard_1'}}); + expect(message).to.not.exists; // two-handed to two-handed - res = equip(user, {params: {key: 'weapon_wizard_2'}}); - expect(res.message).to.not.exists; + [, message] = equip(user, {params: {key: 'weapon_wizard_2'}}); + expect(message).to.not.exists; // two-handed to one-handed - res = equip(user, {params: {key: 'weapon_warrior_2'}}); - expect(res.message).to.not.exists; + [, message] = equip(user, {params: {key: 'weapon_warrior_2'}}); + expect(message).to.not.exists; }); it('should send messages if equipping a two-hander causes the off-hander to be unequipped', () => { @@ -58,10 +58,11 @@ describe('shared.ops.equip', () => { equip(user, {params: {key: 'shield_warrior_1'}}); // equipping two-hander - let res = equip(user, {params: {key: 'weapon_wizard_1'}}); + let [data, message] = equip(user, {params: {key: 'weapon_wizard_1'}}); let weapon = content.gear.flat.weapon_wizard_1; let item = content.gear.flat.shield_warrior_1; + let res = {data, message}; expect(res).to.eql({ message: i18n.t('messageTwoHandedEquip', {twoHandedText: weapon.text(), offHandedText: item.text()}), data: user.items, @@ -74,8 +75,9 @@ describe('shared.ops.equip', () => { let weapon = content.gear.flat.weapon_wizard_1; let shield = content.gear.flat.shield_warrior_1; - let res = equip(user, {params: {key: 'shield_warrior_1'}}); + let [data, message] = equip(user, {params: {key: 'shield_warrior_1'}}); + let res = {data, message}; expect(res).to.eql({ message: i18n.t('messageTwoHandedUnequip', {twoHandedText: weapon.text(), offHandedText: shield.text()}), data: user.items, diff --git a/test/common/ops/feed.js b/test/common/ops/feed.js index 40d28169c4..0b726f5ec7 100644 --- a/test/common/ops/feed.js +++ b/test/common/ops/feed.js @@ -105,16 +105,14 @@ describe('shared.ops.feed', () => { let potionText = content.hatchingPotions[potion] ? content.hatchingPotions[potion].text() : potion; let eggText = content.eggs[egg] ? content.eggs[egg].text() : egg; - let res = feed(user, {params: {pet: 'Wolf-Base', food: 'Saddle'}}); - expect(res).to.eql({ - data: user.items.pets['Wolf-Base'], - message: i18n.t('messageEvolve', { - egg: i18n.t('petName', { - potion: potionText, - egg: eggText, - }), + let [data, message] = feed(user, {params: {pet: 'Wolf-Base', food: 'Saddle'}}); + expect(data).to.eql(user.items.pets['Wolf-Base']); + expect(message).to.eql(i18n.t('messageEvolve', { + egg: i18n.t('petName', { + potion: potionText, + egg: eggText, }), - }); + })); expect(user.items.food.Saddle).to.equal(1); expect(user.items.pets['Wolf-Base']).to.equal(-1); @@ -131,17 +129,15 @@ describe('shared.ops.feed', () => { let potionText = content.hatchingPotions[potion] ? content.hatchingPotions[potion].text() : potion; let eggText = content.eggs[egg] ? content.eggs[egg].text() : egg; - let res = feed(user, {params: {pet: 'Wolf-Base', food: 'Meat'}}); - expect(res).to.eql({ - data: user.items.pets['Wolf-Base'], - message: i18n.t('messageLikesFood', { - egg: i18n.t('petName', { - potion: potionText, - egg: eggText, - }), - foodText: food.text(), + let [data, message] = feed(user, {params: {pet: 'Wolf-Base', food: 'Meat'}}); + expect(data).to.eql(user.items.pets['Wolf-Base']); + expect(message).to.eql(i18n.t('messageLikesFood', { + egg: i18n.t('petName', { + potion: potionText, + egg: eggText, }), - }); + foodText: food.text(), + })); expect(user.items.food.Meat).to.equal(1); expect(user.items.pets['Wolf-Base']).to.equal(10); @@ -156,17 +152,15 @@ describe('shared.ops.feed', () => { let potionText = content.hatchingPotions[potion] ? content.hatchingPotions[potion].text() : potion; let eggText = content.eggs[egg] ? content.eggs[egg].text() : egg; - let res = feed(user, {params: {pet: 'Wolf-Spooky', food: 'Milk'}}); - expect(res).to.eql({ - data: user.items.pets['Wolf-Spooky'], - message: i18n.t('messageLikesFood', { - egg: i18n.t('petName', { - potion: potionText, - egg: eggText, - }), - foodText: food.text(), + let [data, message] = feed(user, {params: {pet: 'Wolf-Spooky', food: 'Milk'}}); + expect(data).to.eql(user.items.pets['Wolf-Spooky']); + expect(message).to.eql(i18n.t('messageLikesFood', { + egg: i18n.t('petName', { + potion: potionText, + egg: eggText, }), - }); + foodText: food.text(), + })); expect(user.items.food.Milk).to.equal(1); expect(user.items.pets['Wolf-Spooky']).to.equal(10); @@ -181,17 +175,15 @@ describe('shared.ops.feed', () => { let potionText = content.hatchingPotions[potion] ? content.hatchingPotions[potion].text() : potion; let eggText = content.eggs[egg] ? content.eggs[egg].text() : egg; - let res = feed(user, {params: {pet: 'Wolf-Base', food: 'Milk'}}); - expect(res).to.eql({ - data: user.items.pets['Wolf-Base'], - message: i18n.t('messageDontEnjoyFood', { - egg: i18n.t('petName', { - potion: potionText, - egg: eggText, - }), - foodText: food.text(), + let [data, message] = feed(user, {params: {pet: 'Wolf-Base', food: 'Milk'}}); + expect(data).to.eql(user.items.pets['Wolf-Base']); + expect(message).to.eql(i18n.t('messageDontEnjoyFood', { + egg: i18n.t('petName', { + potion: potionText, + egg: eggText, }), - }); + foodText: food.text(), + })); expect(user.items.food.Milk).to.equal(1); expect(user.items.pets['Wolf-Base']).to.equal(7); @@ -206,16 +198,14 @@ describe('shared.ops.feed', () => { let potionText = content.hatchingPotions[potion] ? content.hatchingPotions[potion].text() : potion; let eggText = content.eggs[egg] ? content.eggs[egg].text() : egg; - let res = feed(user, {params: {pet: 'Wolf-Base', food: 'Milk'}}); - expect(res).to.eql({ - data: user.items.pets['Wolf-Base'], - message: i18n.t('messageEvolve', { - egg: i18n.t('petName', { - potion: potionText, - egg: eggText, - }), + let [data, message] = feed(user, {params: {pet: 'Wolf-Base', food: 'Milk'}}); + expect(data).to.eql(user.items.pets['Wolf-Base']); + expect(message).to.eql(i18n.t('messageEvolve', { + egg: i18n.t('petName', { + potion: potionText, + egg: eggText, }), - }); + })); expect(user.items.food.Milk).to.equal(1); expect(user.items.pets['Wolf-Base']).to.equal(-1); diff --git a/test/common/ops/hatch.js b/test/common/ops/hatch.js index 0176b46b5f..87131db13b 100644 --- a/test/common/ops/hatch.js +++ b/test/common/ops/hatch.js @@ -99,9 +99,9 @@ describe('shared.ops.hatch', () => { user.items.eggs = {Wolf: 1}; user.items.hatchingPotions = {Base: 1}; user.items.pets = {}; - let res = hatch(user, {params: {egg: 'Wolf', hatchingPotion: 'Base'}}); - expect(res.message).to.equal(i18n.t('messageHatched')); - expect(res.data).to.eql(user.items); + let [data, message] = hatch(user, {params: {egg: 'Wolf', hatchingPotion: 'Base'}}); + expect(message).to.equal(i18n.t('messageHatched')); + expect(data).to.eql(user.items); expect(user.items.pets).to.eql({'Wolf-Base': 5}); expect(user.items.eggs).to.eql({Wolf: 0}); expect(user.items.hatchingPotions).to.eql({Base: 0}); @@ -111,9 +111,9 @@ describe('shared.ops.hatch', () => { user.items.eggs = {Cheetah: 1}; user.items.hatchingPotions = {Base: 1}; user.items.pets = {}; - let res = hatch(user, {params: {egg: 'Cheetah', hatchingPotion: 'Base'}}); - expect(res.message).to.equal(i18n.t('messageHatched')); - expect(res.data).to.eql(user.items); + let [data, message] = hatch(user, {params: {egg: 'Cheetah', hatchingPotion: 'Base'}}); + expect(message).to.equal(i18n.t('messageHatched')); + expect(data).to.eql(user.items); expect(user.items.pets).to.eql({'Cheetah-Base': 5}); expect(user.items.eggs).to.eql({Cheetah: 0}); expect(user.items.hatchingPotions).to.eql({Base: 0}); @@ -123,9 +123,9 @@ describe('shared.ops.hatch', () => { user.items.eggs = {Wolf: 1}; user.items.hatchingPotions = {Spooky: 1}; user.items.pets = {}; - let res = hatch(user, {params: {egg: 'Wolf', hatchingPotion: 'Spooky'}}); - expect(res.message).to.equal(i18n.t('messageHatched')); - expect(res.data).to.eql(user.items); + let [data, message] = hatch(user, {params: {egg: 'Wolf', hatchingPotion: 'Spooky'}}); + expect(message).to.equal(i18n.t('messageHatched')); + expect(data).to.eql(user.items); expect(user.items.pets).to.eql({'Wolf-Spooky': 5}); expect(user.items.eggs).to.eql({Wolf: 0}); expect(user.items.hatchingPotions).to.eql({Spooky: 0}); @@ -135,9 +135,9 @@ describe('shared.ops.hatch', () => { user.items.eggs = {Wolf: 1}; user.items.hatchingPotions = {Base: 1}; user.items.pets = {'Wolf-Base': -1}; - let res = hatch(user, {params: {egg: 'Wolf', hatchingPotion: 'Base'}}); - expect(res.message).to.eql(i18n.t('messageHatched')); - expect(res.data).to.eql(user.items); + let [data, message] = hatch(user, {params: {egg: 'Wolf', hatchingPotion: 'Base'}}); + expect(message).to.eql(i18n.t('messageHatched')); + expect(data).to.eql(user.items); expect(user.items.pets).to.eql({'Wolf-Base': 5}); expect(user.items.eggs).to.eql({Wolf: 0}); expect(user.items.hatchingPotions).to.eql({Base: 0}); diff --git a/test/common/ops/hourglassPurchase.js b/test/common/ops/hourglassPurchase.js index 258e0c6f01..98400f82b5 100644 --- a/test/common/ops/hourglassPurchase.js +++ b/test/common/ops/hourglassPurchase.js @@ -126,9 +126,9 @@ describe('user.ops.hourglassPurchase', () => { it('buys a pet', () => { user.purchased.plan.consecutive.trinkets = 2; - let response = hourglassPurchase(user, {params: {type: 'pets', key: 'MantisShrimp-Base'}}); + let [, message] = hourglassPurchase(user, {params: {type: 'pets', key: 'MantisShrimp-Base'}}); - expect(response.message).to.eql(i18n.t('hourglassPurchase')); + expect(message).to.eql(i18n.t('hourglassPurchase')); expect(user.purchased.plan.consecutive.trinkets).to.eql(1); expect(user.items.pets).to.eql({'MantisShrimp-Base': 5}); }); @@ -136,8 +136,8 @@ describe('user.ops.hourglassPurchase', () => { it('buys a mount', () => { user.purchased.plan.consecutive.trinkets = 2; - let response = hourglassPurchase(user, {params: {type: 'mounts', key: 'MantisShrimp-Base'}}); - expect(response.message).to.eql(i18n.t('hourglassPurchase')); + let [, message] = hourglassPurchase(user, {params: {type: 'mounts', key: 'MantisShrimp-Base'}}); + expect(message).to.eql(i18n.t('hourglassPurchase')); expect(user.purchased.plan.consecutive.trinkets).to.eql(1); expect(user.items.mounts).to.eql({'MantisShrimp-Base': true}); }); diff --git a/test/common/ops/openMysteryItem.js b/test/common/ops/openMysteryItem.js index c45146a585..712c032254 100644 --- a/test/common/ops/openMysteryItem.js +++ b/test/common/ops/openMysteryItem.js @@ -29,10 +29,10 @@ describe('shared.ops.openMysteryItem', () => { user.purchased.plan.mysteryItems = [mysteryItemKey]; - let response = openMysteryItem(user); + let [data, message] = openMysteryItem(user); expect(user.items.gear.owned[mysteryItemKey]).to.be.true; - expect(response.message).to.equal(i18n.t('mysteryItemOpened')); - expect(response.data).to.equal(user.items.gear.owned); + expect(message).to.equal(i18n.t('mysteryItemOpened')); + expect(data).to.equal(user.items.gear.owned); }); }); diff --git a/test/common/ops/purchase.js b/test/common/ops/purchase.js index 557ee006cf..5e32442c76 100644 --- a/test/common/ops/purchase.js +++ b/test/common/ops/purchase.js @@ -10,7 +10,7 @@ import { generateUser, } from '../../helpers/common.helper'; -describe('shared.ops.feed', () => { +describe('shared.ops.purchase', () => { let user; let goldPoints = 40; let gemsBought = 40; @@ -128,7 +128,7 @@ describe('shared.ops.feed', () => { }); }); - context('successful feeding', () => { + context('successful purchase', () => { let userGemAmount = 10; before(() => { @@ -138,9 +138,9 @@ describe('shared.ops.feed', () => { }); it('purchases gems', () => { - let purchaseResponse = purchase(user, {params: {type: 'gems', key: 'gem'}}); + let [, message] = purchase(user, {params: {type: 'gems', key: 'gem'}}); - expect(purchaseResponse.message).to.equal(i18n.t('plusOneGem')); + expect(message).to.equal(i18n.t('plusOneGem')); expect(user.balance).to.equal(userGemAmount + 0.25); expect(user.purchased.plan.gemsBought).to.equal(1); expect(user.stats.gp).to.equal(goldPoints - planGemLimits.convRate); @@ -150,9 +150,9 @@ describe('shared.ops.feed', () => { let type = 'eggs'; let key = 'Wolf'; - let purchaseResponse = purchase(user, {params: {type, key}}); + let [, message] = purchase(user, {params: {type, key}}); - expect(purchaseResponse.message).to.equal(i18n.t('purchased', {type, key})); + expect(message).to.equal(i18n.t('purchased', {type, key})); expect(user.items[type][key]).to.equal(1); }); @@ -160,9 +160,9 @@ describe('shared.ops.feed', () => { let type = 'hatchingPotions'; let key = 'Base'; - let purchaseResponse = purchase(user, {params: {type, key}}); + let [, message] = purchase(user, {params: {type, key}}); - expect(purchaseResponse.message).to.equal(i18n.t('purchased', {type, key})); + expect(message).to.equal(i18n.t('purchased', {type, key})); expect(user.items[type][key]).to.equal(1); }); @@ -170,9 +170,9 @@ describe('shared.ops.feed', () => { let type = 'food'; let key = 'Meat'; - let purchaseResponse = purchase(user, {params: {type, key}}); + let [, message] = purchase(user, {params: {type, key}}); - expect(purchaseResponse.message).to.equal(i18n.t('purchased', {type, key})); + expect(message).to.equal(i18n.t('purchased', {type, key})); expect(user.items[type][key]).to.equal(1); }); @@ -180,9 +180,9 @@ describe('shared.ops.feed', () => { let type = 'quests'; let key = 'gryphon'; - let purchaseResponse = purchase(user, {params: {type, key}}); + let [, message] = purchase(user, {params: {type, key}}); - expect(purchaseResponse.message).to.equal(i18n.t('purchased', {type, key})); + expect(message).to.equal(i18n.t('purchased', {type, key})); expect(user.items[type][key]).to.equal(1); }); @@ -190,9 +190,9 @@ describe('shared.ops.feed', () => { let type = 'gear'; let key = 'headAccessory_special_tigerEars'; - let purchaseResponse = purchase(user, {params: {type, key}}); + let [, message] = purchase(user, {params: {type, key}}); - expect(purchaseResponse.message).to.equal(i18n.t('purchased', {type, key})); + expect(message).to.equal(i18n.t('purchased', {type, key})); expect(user.items.gear.owned[key]).to.be.true; }); }); diff --git a/test/common/ops/readCard.js b/test/common/ops/readCard.js index 27f78ea5cd..5d771ab0d6 100644 --- a/test/common/ops/readCard.js +++ b/test/common/ops/readCard.js @@ -39,9 +39,9 @@ describe('shared.ops.readCard', () => { }); it('reads a card', () => { - let response = readCard(user, {params: {cardType: 'greeting'}}); + let [, message] = readCard(user, {params: {cardType: 'greeting'}}); - expect(response.message).to.equal(i18n.t('readCard', {cardType})); + expect(message).to.equal(i18n.t('readCard', {cardType})); expect(user.items.special[`${cardType}Received`]).to.be.empty; expect(user.flags.cardReceived).to.be.false; }); diff --git a/test/common/ops/rebirth.js b/test/common/ops/rebirth.js index 61d1334569..0ab66674b3 100644 --- a/test/common/ops/rebirth.js +++ b/test/common/ops/rebirth.js @@ -35,18 +35,18 @@ describe('shared.ops.rebirth', () => { }); it('rebirths a user with enough gems', () => { - let response = rebirth(user); + let [, message] = rebirth(user); - expect(response.message).to.equal(i18n.t('rebirthComplete')); + expect(message).to.equal(i18n.t('rebirthComplete')); }); it('rebirths a user with not enough gems but max level', () => { user.balance = 0; user.stats.lvl = MAX_LEVEL; - let response = rebirth(user); + let [, message] = rebirth(user); - expect(response.message).to.equal(i18n.t('rebirthComplete')); + expect(message).to.equal(i18n.t('rebirthComplete')); }); it('resets user\'s taks values except for rewards to 0', () => { diff --git a/test/common/ops/releaseBoth.js b/test/common/ops/releaseBoth.js index 309734e7d4..41e1bf6efb 100644 --- a/test/common/ops/releaseBoth.js +++ b/test/common/ops/releaseBoth.js @@ -33,9 +33,9 @@ describe('shared.ops.releaseBoth', () => { }); it('grants triad bingo with gems', () => { - let response = releaseBoth(user); + let [, message] = releaseBoth(user); - expect(response.message).to.equal(i18n.t('mountsAndPetsReleased')); + expect(message).to.equal(i18n.t('mountsAndPetsReleased')); expect(user.achievements.triadBingoCount).to.equal(1); }); @@ -44,24 +44,24 @@ describe('shared.ops.releaseBoth', () => { user.achievements.triadBingo = 1; user.achievements.triadBingoCount = 1; - let response = releaseBoth(user); + let [, message] = releaseBoth(user); - expect(response.message).to.equal(i18n.t('mountsAndPetsReleased')); + expect(message).to.equal(i18n.t('mountsAndPetsReleased')); expect(user.achievements.triadBingoCount).to.equal(2); }); it('releases pets', () => { - let response = releaseBoth(user); + let [, message] = releaseBoth(user); - expect(response.message).to.equal(i18n.t('mountsAndPetsReleased')); + expect(message).to.equal(i18n.t('mountsAndPetsReleased')); expect(user.items.pets[animal]).to.be.empty; expect(user.items.mounts[animal]).to.equal(null); }); it('releases mounts', () => { - let response = releaseBoth(user); + let [, message] = releaseBoth(user); - expect(response.message).to.equal(i18n.t('mountsAndPetsReleased')); + expect(message).to.equal(i18n.t('mountsAndPetsReleased')); expect(user.items.mounts[animal]).to.equal(null); }); diff --git a/test/common/ops/releaseMounts.js b/test/common/ops/releaseMounts.js index 80429b726f..29cb3cf6ac 100644 --- a/test/common/ops/releaseMounts.js +++ b/test/common/ops/releaseMounts.js @@ -31,9 +31,9 @@ describe('shared.ops.releaseMounts', () => { }); it('releases mounts', () => { - let response = releaseMounts(user); + let [, message] = releaseMounts(user); - expect(response.message).to.equal(i18n.t('mountsReleased')); + expect(message).to.equal(i18n.t('mountsReleased')); expect(user.items.mounts[animal]).to.equal(null); }); diff --git a/test/common/ops/releasePets.js b/test/common/ops/releasePets.js index 11d69a5a31..af175736cf 100644 --- a/test/common/ops/releasePets.js +++ b/test/common/ops/releasePets.js @@ -31,9 +31,9 @@ describe('shared.ops.releasePets', () => { }); it('releases pets', () => { - let response = releasePets(user); + let [, message] = releasePets(user); - expect(response.message).to.equal(i18n.t('petsReleased')); + expect(message).to.equal(i18n.t('petsReleased')); expect(user.items.pets[animal]).to.equal(0); }); diff --git a/test/common/ops/reroll.js b/test/common/ops/reroll.js index 8cadd3fa6c..ede0449ee8 100644 --- a/test/common/ops/reroll.js +++ b/test/common/ops/reroll.js @@ -32,9 +32,9 @@ describe('shared.ops.reroll', () => { }); it('rerolls a user with enough gems', () => { - let response = reroll(user); + let [, message] = reroll(user); - expect(response.message).to.equal(i18n.t('rerollComplete')); + expect(message).to.equal(i18n.t('rerollComplete')); }); it('reduces a user\'s balance', () => { diff --git a/test/common/ops/reset.js b/test/common/ops/reset.js index 2243cfa127..50ebf90cb5 100644 --- a/test/common/ops/reset.js +++ b/test/common/ops/reset.js @@ -31,9 +31,9 @@ describe('shared.ops.reset', () => { it('resets a user', () => { - let response = reset(user); + let [, message] = reset(user); - expect(response.message).to.equal(i18n.t('resetComplete')); + expect(message).to.equal(i18n.t('resetComplete')); }); it('resets user\'s health', () => { diff --git a/test/common/ops/revive.js b/test/common/ops/revive.js index 42e1915b07..efd6968b42 100644 --- a/test/common/ops/revive.js +++ b/test/common/ops/revive.js @@ -57,9 +57,9 @@ describe('shared.ops.revive', () => { let weaponKey = 'weapon_warrior_0'; user.items.gear.owned[weaponKey] = true; - let reviveRequest = revive(user); + let [, message] = revive(user); - expect(reviveRequest.message).to.equal(i18n.t('messageLostItem', { itemText: content.gear.flat[weaponKey].text()})); + expect(message).to.equal(i18n.t('messageLostItem', { itemText: content.gear.flat[weaponKey].text()})); expect(user.items.gear.owned[weaponKey]).to.be.false; }); @@ -70,9 +70,9 @@ describe('shared.ops.revive', () => { user.items.gear.owned[weaponKey] = true; user.items.gear.equipped[itemToLose.type] = itemToLose.key; - let reviveRequest = revive(user); + let [, message] = revive(user); - expect(reviveRequest.message).to.equal(i18n.t('messageLostItem', { itemText: itemToLose.text()})); + expect(message).to.equal(i18n.t('messageLostItem', { itemText: itemToLose.text()})); expect(user.items.gear.equipped[itemToLose.type]).to.equal(`${itemToLose.type}_base_0`); }); @@ -83,9 +83,9 @@ describe('shared.ops.revive', () => { user.items.gear.owned[weaponKey] = true; user.items.gear.costume[itemToLose.type] = itemToLose.key; - let reviveRequest = revive(user); + let [, message] = revive(user); - expect(reviveRequest.message).to.equal(i18n.t('messageLostItem', { itemText: itemToLose.text()})); + expect(message).to.equal(i18n.t('messageLostItem', { itemText: itemToLose.text()})); expect(user.items.gear.costume[itemToLose.type]).to.equal(`${itemToLose.type}_base_0`); }); }); diff --git a/test/common/ops/sell.js b/test/common/ops/sell.js index c5499b00d2..e294f43e54 100644 --- a/test/common/ops/sell.js +++ b/test/common/ops/sell.js @@ -66,16 +66,16 @@ describe('shared.ops.sell', () => { }); it('reduces item count from user', () => { - let response = sell(user, {params: { type, key } }); + let [, message] = sell(user, {params: { type, key } }); - expect(response.message).to.equal(i18n.t('sold', {type, key})); + expect(message).to.equal(i18n.t('sold', {type, key})); expect(user.items[type][key]).to.equal(0); }); it('increases user\'s gold', () => { - let response = sell(user, {params: { type, key } }); + let [, message] = sell(user, {params: { type, key } }); - expect(response.message).to.equal(i18n.t('sold', {type, key})); + expect(message).to.equal(i18n.t('sold', {type, key})); expect(user.stats.gp).to.equal(content[type][key].value); }); }); diff --git a/test/common/ops/sleep.js b/test/common/ops/sleep.js index 5466631f75..f1e15625c9 100644 --- a/test/common/ops/sleep.js +++ b/test/common/ops/sleep.js @@ -7,12 +7,12 @@ describe('shared.ops.sleep', () => { it('toggles user.preferences.sleep', () => { let user = generateUser(); - let res = sleep(user); - expect(res).to.eql({preferences: {sleep: true}}); + let [res] = sleep(user); + expect(res).to.eql(true); expect(user.preferences.sleep).to.equal(true); - let res2 = sleep(user); - expect(res2).to.eql({preferences: {sleep: false}}); + let [res2] = sleep(user); + expect(res2).to.eql(false); expect(user.preferences.sleep).to.equal(false); }); }); diff --git a/test/common/ops/unlock.js b/test/common/ops/unlock.js index b7d7bda370..6023b51abe 100644 --- a/test/common/ops/unlock.js +++ b/test/common/ops/unlock.js @@ -55,30 +55,30 @@ describe('shared.ops.unlock', () => { }); it('unlocks a full set', () => { - let response = unlock(user, {query: {path: unlockPath}}); + let [, message] = unlock(user, {query: {path: unlockPath}}); - expect(response.message).to.equal(i18n.t('unlocked')); + expect(message).to.equal(i18n.t('unlocked')); expect(user.purchased.shirt.convict).to.be.true; }); it('unlocks a full set of gear', () => { - let response = unlock(user, {query: {path: unlockGearSetPath}}); + let [, message] = unlock(user, {query: {path: unlockGearSetPath}}); - expect(response.message).to.equal(i18n.t('unlocked')); + expect(message).to.equal(i18n.t('unlocked')); expect(user.items.gear.owned.headAccessory_special_wolfEars).to.be.true; }); it('unlocks a an item', () => { - let response = unlock(user, {query: {path: backgroundUnlockPath}}); + let [, message] = unlock(user, {query: {path: backgroundUnlockPath}}); - expect(response.message).to.equal(i18n.t('unlocked')); + expect(message).to.equal(i18n.t('unlocked')); expect(user.purchased.background.giant_florals).to.be.true; }); it('reduces a user\'s balance', () => { - let response = unlock(user, {query: {path: unlockPath}}); + let [, message] = unlock(user, {query: {path: unlockPath}}); - expect(response.message).to.equal(i18n.t('unlocked')); + expect(message).to.equal(i18n.t('unlocked')); expect(user.balance).to.equal(usersStartingGems - unlockCost); }); }); diff --git a/test/common/ops/updateTask.js b/test/common/ops/updateTask.js index 834aa0c419..d476421f7c 100644 --- a/test/common/ops/updateTask.js +++ b/test/common/ops/updateTask.js @@ -19,7 +19,7 @@ describe('shared.ops.updateTask', () => { }], }); - let res = updateTask(habit, { + let [res] = updateTask(habit, { body: { text: 'updated', id: '123', diff --git a/test/helpers/api-integration/requester.js b/test/helpers/api-integration/requester.js index a634421d13..1be38efe16 100644 --- a/test/helpers/api-integration/requester.js +++ b/test/helpers/api-integration/requester.js @@ -92,7 +92,14 @@ function _parseRes (res) { if (apiVersion === 'v2') { return res.body; } else if (apiVersion === 'v3') { - return res.body.data; + if (res.body.message) { + return { + data: res.body.data, + message: res.body.message, + }; + } else { + return res.body.data; + } } } diff --git a/website/src/controllers/api-v2/user.js b/website/src/controllers/api-v2/user.js index aa82123866..c11c371c01 100644 --- a/website/src/controllers/api-v2/user.js +++ b/website/src/controllers/api-v2/user.js @@ -124,7 +124,7 @@ api.score = function(req, res, next) { task.completed = direction === 'up'; } - var delta = shared.ops.scoreTask({ + var [delta] = shared.ops.scoreTask({ user, task, direction, @@ -835,7 +835,7 @@ api.updateTask = function(req, res, next) { if(!task) return res.status(404).json({err: 'Task not found.'}) try { - _.assign(task, shared.ops.updateTask(task.toObject(), req)); + _.assign(task, shared.ops.updateTask(task.toObject(), req)[0]); task.save(function(err, task){ if(err) return next(err); @@ -892,6 +892,9 @@ _.each(shared.ops, function(op,k){ try { req.v2 = true; // Used to indicate to the shared code that the old response data should be returned opResponse = shared.ops[k](res.locals.user, req, analytics); + if (Array.isArray(opResponse) && opResponse.length < 3) { + opResponse = opResponse[0]; + } } catch (err) { if (!err.code) return next(err); if (err.code >= 400) return res.status(err.code).json({err:err.message}); diff --git a/website/src/controllers/api-v3/auth.js b/website/src/controllers/api-v3/auth.js index 08c405424e..cf05b69624 100644 --- a/website/src/controllers/api-v3/auth.js +++ b/website/src/controllers/api-v3/auth.js @@ -420,7 +420,7 @@ api.resetPassword = { }); await user.save(); } - res.respond(200, { message: res.t('passwordReset') }); + res.respond(200, {}, res.t('passwordReset')); }, }; diff --git a/website/src/controllers/api-v3/tasks.js b/website/src/controllers/api-v3/tasks.js index c6cd66debc..3af9d91090 100644 --- a/website/src/controllers/api-v3/tasks.js +++ b/website/src/controllers/api-v3/tasks.js @@ -304,7 +304,8 @@ api.updateTask = { // we have to convert task to an object because otherwise things don't get merged correctly. Bad for performances? // TODO regarding comment above, make sure other models with nested fields are using this trick too - _.assign(task, Tasks.Task.sanitize(common.ops.updateTask(task.toObject(), req))); + let [updatedTaskObj] = common.ops.updateTask(task.toObject(), req); + _.assign(task, Tasks.Task.sanitize(updatedTaskObj)); // console.log(task.modifiedPaths(), task.toObject().repeat === tep) // repeat is always among modifiedPaths because mongoose changes the other of the keys when using .toObject() // see https://github.com/Automattic/mongoose/issues/2749 @@ -376,7 +377,7 @@ api.scoreTask = { let wasCompleted = task.completed; - let delta = common.ops.scoreTask({task, user, direction}, req); + let [delta] = common.ops.scoreTask({task, user, direction}, req); // Drop system (don't run on the client, as it would only be discarded since ops are sent to the API, not the results) if (direction === 'up') user.fns.randomDrop({task, delta}, req); diff --git a/website/src/controllers/api-v3/user.js b/website/src/controllers/api-v3/user.js index 309a299953..427985e5b9 100644 --- a/website/src/controllers/api-v3/user.js +++ b/website/src/controllers/api-v3/user.js @@ -432,7 +432,7 @@ api.sleep = { let user = res.locals.user; let sleepRes = common.ops.sleep(user); await user.save(); - res.respond(200, sleepRes); + res.respond(200, ...sleepRes); }, }; @@ -452,7 +452,7 @@ api.allocate = { let user = res.locals.user; let allocateRes = common.ops.allocate(user, req); await user.save(); - res.respond(200, allocateRes); + res.respond(200, ...allocateRes); }, }; @@ -472,7 +472,7 @@ api.allocateNow = { let user = res.locals.user; let allocateNowRes = common.ops.allocateNow(user, req); await user.save(); - res.respond(200, allocateNowRes); + res.respond(200, ...allocateNowRes); }, }; @@ -495,7 +495,7 @@ api.buy = { let user = res.locals.user; let buyRes = common.ops.buy(user, req, res.analytics); await user.save(); - res.respond(200, buyRes); + res.respond(200, ...buyRes); }, }; @@ -516,9 +516,9 @@ api.buyGear = { url: '/user/buy-gear/:key', async handler (req, res) { let user = res.locals.user; - let buyRes = common.ops.buyGear(user, req, res.analytics); + let buyGearRes = common.ops.buyGear(user, req, res.analytics); await user.save(); - res.respond(200, buyRes); + res.respond(200, ...buyGearRes); }, }; @@ -542,7 +542,7 @@ api.buyArmoire = { let user = res.locals.user; let buyArmoireResponse = common.ops.buyArmoire(user, req, res.analytics); await user.save(); - res.respond(200, buyArmoireResponse); + res.respond(200, ...buyArmoireResponse); }, }; @@ -565,7 +565,7 @@ api.buyPotion = { let user = res.locals.user; let buyPotionResponse = common.ops.buyPotion(user, req, res.analytics); await user.save(); - res.respond(200, buyPotionResponse); + res.respond(200, ...buyPotionResponse); }, }; @@ -588,7 +588,7 @@ api.buyMysterySet = { let user = res.locals.user; let buyMysterySetRes = common.ops.buyMysterySet(user, req, res.analytics); await user.save(); - res.respond(200, buyMysterySetRes); + res.respond(200, ...buyMysterySetRes); }, }; @@ -611,7 +611,7 @@ api.buyQuest = { let user = res.locals.user; let buyQuestRes = common.ops.buyQuest(user, req, res.analytics); await user.save(); - res.respond(200, buyQuestRes); + res.respond(200, ...buyQuestRes); }, }; @@ -634,7 +634,7 @@ api.buySpecialSpell = { let user = res.locals.user; let buySpecialSpellRes = common.ops.buySpecialSpell(user, req); await user.save(); - res.respond(200, buySpecialSpellRes); + res.respond(200, ...buySpecialSpellRes); }, }; @@ -658,7 +658,7 @@ api.hatch = { let user = res.locals.user; let hatchRes = common.ops.hatch(user, req); await user.save(); - res.respond(200, hatchRes); + res.respond(200, ...hatchRes); }, }; @@ -682,7 +682,7 @@ api.equip = { let user = res.locals.user; let equipRes = common.ops.equip(user, req); await user.save(); - res.respond(200, equipRes); + res.respond(200, ...equipRes); }, }; @@ -706,7 +706,7 @@ api.feed = { let user = res.locals.user; let feedRes = common.ops.feed(user, req); await user.save(); - res.respond(200, feedRes); + res.respond(200, ...feedRes); }, }; @@ -728,7 +728,7 @@ api.changeClass = { let user = res.locals.user; let changeClassRes = common.ops.changeClass(user, req, res.analytics); await user.save(); - res.respond(200, changeClassRes); + res.respond(200, ...changeClassRes); }, }; @@ -748,7 +748,7 @@ api.disableClasses = { let user = res.locals.user; let disableClassesRes = common.ops.disableClasses(user, req); await user.save(); - res.respond(200, disableClassesRes); + res.respond(200, ...disableClassesRes); }, }; @@ -769,9 +769,9 @@ api.purchase = { url: '/user/purchase/:type/:key', async handler (req, res) { let user = res.locals.user; - let purchaseResponse = common.ops.purchase(user, req, res.analytics); + let purchaseRes = common.ops.purchase(user, req, res.analytics); await user.save(); - res.respond(200, purchaseResponse); + res.respond(200, ...purchaseRes); }, }; @@ -792,9 +792,9 @@ api.userPurchaseHourglass = { url: '/user/purchase-hourglass/:type/:key', async handler (req, res) { let user = res.locals.user; - let purchaseHourglassResponse = common.ops.purchaseHourglass(user, req, res.analytics); + let purchaseHourglassRes = common.ops.purchaseHourglass(user, req, res.analytics); await user.save(); - res.respond(200, purchaseHourglassResponse); + res.respond(200, ...purchaseHourglassRes); }, }; @@ -814,9 +814,9 @@ api.readCard = { url: '/user/read-card/:cardType', async handler (req, res) { let user = res.locals.user; - let readCardResponse = common.ops.readCard(user, req); + let readCardRes = common.ops.readCard(user, req); await user.save(); - res.respond(200, readCardResponse); + res.respond(200, ...readCardRes); }, }; @@ -834,9 +834,9 @@ api.userOpenMysteryItem = { url: '/user/open-mystery-item', async handler (req, res) { let user = res.locals.user; - let openMysteryItemResponse = common.ops.openMysteryItem(user, req, res.analytics); + let openMysteryItemRes = common.ops.openMysteryItem(user, req, res.analytics); await user.save(); - res.respond(200, openMysteryItemResponse); + res.respond(200, ...openMysteryItemRes); }, }; @@ -853,9 +853,9 @@ api.addWebhook = { url: '/user/webhook', async handler (req, res) { let user = res.locals.user; - let result = common.ops.addWebhook(user, req); + let addWebhookRes = common.ops.addWebhook(user, req); await user.save(); - res.respond(200, result); + res.respond(200, ...addWebhookRes); }, }; @@ -872,9 +872,9 @@ api.updateWebhook = { url: '/user/webhook/:id', async handler (req, res) { let user = res.locals.user; - let result = common.ops.updateWebhook(user, req); + let updateWebhookRes = common.ops.updateWebhook(user, req); await user.save(); - res.respond(200, result); + res.respond(200, ...updateWebhookRes); }, }; @@ -891,9 +891,9 @@ api.deleteWebhook = { url: '/user/webhook/:id', async handler (req, res) { let user = res.locals.user; - common.ops.deleteWebhook(user, req); + let deleteWebhookRes = common.ops.deleteWebhook(user, req); await user.save(); - res.respond(200, {}); + res.respond(200, ...deleteWebhookRes); }, }; @@ -911,9 +911,9 @@ api.userReleasePets = { url: '/user/release-pets', async handler (req, res) { let user = res.locals.user; - let releasePetsResponse = common.ops.releasePets(user, req, res.analytics); + let releasePetsRes = common.ops.releasePets(user, req, res.analytics); await user.save(); - res.respond(200, releasePetsResponse); + res.respond(200, ...releasePetsRes); }, }; @@ -931,9 +931,9 @@ api.userReleaseBoth = { url: '/user/release-both', async handler (req, res) { let user = res.locals.user; - let releaseBothResponse = common.ops.releaseBoth(user, req, res.analytics); + let releaseBothRes = common.ops.releaseBoth(user, req, res.analytics); await user.save(); - res.respond(200, releaseBothResponse); + res.respond(200, ...releaseBothRes); }, }; @@ -951,9 +951,9 @@ api.userReleaseMounts = { url: '/user/release-mounts', async handler (req, res) { let user = res.locals.user; - let releaseMountsResponse = common.ops.releaseMounts(user, req, res.analytics); + let releaseMountsRes = common.ops.releaseMounts(user, req, res.analytics); await user.save(); - res.respond(200, releaseMountsResponse); + res.respond(200, ...releaseMountsRes); }, }; @@ -971,9 +971,9 @@ api.userSell = { url: '/user/sell/:type/:key', async handler (req, res) { let user = res.locals.user; - let sellResponse = common.ops.sell(user, req); + let sellRes = common.ops.sell(user, req); await user.save(); - res.respond(200, sellResponse); + res.respond(200, ...sellRes); }, }; @@ -991,9 +991,9 @@ api.userUnlock = { url: '/user/unlock', async handler (req, res) { let user = res.locals.user; - let unlockResponse = common.ops.unlock(user, req); + let unlockRes = common.ops.unlock(user, req); await user.save(); - res.respond(200, unlockResponse); + res.respond(200, ...unlockRes); }, }; @@ -1011,9 +1011,9 @@ api.userRevive = { url: '/user/revive', async handler (req, res) { let user = res.locals.user; - let reviveResponse = common.ops.revive(user, req, res.analytics); + let reviveRes = common.ops.revive(user, req, res.analytics); await user.save(); - res.respond(200, reviveResponse); + res.respond(200, ...reviveRes); }, }; @@ -1036,13 +1036,13 @@ api.userRebirth = { type: {$in: ['daily', 'habit', 'todo']}, }; let tasks = await Tasks.Task.find(query).exec(); - let rebirthResponse = common.ops.rebirth(user, tasks, req, res.analytics); + let rebirthRes = common.ops.rebirth(user, tasks, req, res.analytics); await user.save(); await Q.all(tasks.map(task => task.save())); - res.respond(200, rebirthResponse); + res.respond(200, ...rebirthRes); }, }; @@ -1059,9 +1059,9 @@ api.blockUser = { url: '/user/block/:uuid', async handler (req, res) { let user = res.locals.user; - let blocks = common.ops.blockUser(user, req); + let blockUserRes = common.ops.blockUser(user, req); await user.save(); - res.respond(200, blocks); + res.respond(200, ...blockUserRes); }, }; @@ -1078,9 +1078,9 @@ api.deleteMessage = { url: '/user/messages/:id', async handler (req, res) { let user = res.locals.user; - let messages = common.ops.deletePM(user, req); + let deletePMRes = common.ops.deletePM(user, req); await user.save(); - res.respond(200, messages); + res.respond(200, ...deletePMRes); }, }; @@ -1097,9 +1097,9 @@ api.clearMessages = { url: '/user/messages', async handler (req, res) { let user = res.locals.user; - let PMs = common.ops.clearPMs(user, req); + let clearPMsRes = common.ops.clearPMs(user, req); await user.save(); - res.respond(200, PMs); + res.respond(200, ...clearPMsRes); }, }; @@ -1122,14 +1122,14 @@ api.userReroll = { type: {$in: ['daily', 'habit', 'todo']}, }; let tasks = await Tasks.Task.find(query).exec(); - let rerollResponse = common.ops.reroll(user, tasks, req, res.analytics); + let rerollRes = common.ops.reroll(user, tasks, req, res.analytics); let promises = tasks.map(task => task.save()); promises.push(user.save()); await Q.all(promises); - res.respond(200, rerollResponse); + res.respond(200, ...rerollRes); }, }; @@ -1148,10 +1148,10 @@ api.userAddPushDevice = { async handler (req, res) { let user = res.locals.user; - let addPushDeviceResponse = common.ops.addPushDevice(user, req); + let addPushDeviceRes = common.ops.addPushDevice(user, req); await user.save(); - res.respond(200, addPushDeviceResponse); + res.respond(200, ...addPushDeviceRes); }, }; @@ -1172,11 +1172,11 @@ api.userReset = { let tasks = await Tasks.Task.find({userId: user._id}).select('_id type challenge').exec(); - let resetResponse = common.ops.reset(user, tasks); + let resetRes = common.ops.reset(user, tasks); - await Q.all([Tasks.Task.remove({_id: {$in: resetResponse.data.tasksToRemove}, userId: user._id}), user.save()]); + await Q.all([Tasks.Task.remove({_id: {$in: resetRes[0].tasksToRemove}, userId: user._id}), user.save()]); - res.respond(200, resetResponse); + res.respond(200, ...resetRes); }, }; diff --git a/website/src/middlewares/api-v3/response.js b/website/src/middlewares/api-v3/response.js index 7fe4bc7e35..335d51a2ff 100644 --- a/website/src/middlewares/api-v3/response.js +++ b/website/src/middlewares/api-v3/response.js @@ -1,10 +1,14 @@ module.exports = function responseHandler (req, res, next) { // Only used for successful responses - res.respond = function respond (status = 200, data = {}) { - res.status(status).json({ + res.respond = function respond (status = 200, data = {}, message) { + let response = { success: status < 400, data, - }); + }; + + if (message) response.message = message; + + res.status(status).json(response); }; next();