From 9088f98eaefc8e5013658879ac37473863f73d74 Mon Sep 17 00:00:00 2001 From: Scott Erickson Date: Tue, 6 Sep 2016 10:32:54 -0700 Subject: [PATCH] Add function to properties that trigger achievement updates --- app/core/application.coffee | 2 +- server/middleware/achievements.coffee | 2 +- spec/server/functional/achievement.spec.coffee | 7 ++++++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/core/application.coffee b/app/core/application.coffee index f5cbd0a54..ed6fe981a 100644 --- a/app/core/application.coffee +++ b/app/core/application.coffee @@ -65,7 +65,7 @@ Application = { unless me.get('anonymous') # TODO: Remove logging later, once this system has proved stable me.on 'change:earned', (user, newEarned) -> - oldEarned = user.previous('earned') + oldEarned = user.previous('earned') ? {} if oldEarned.gems isnt newEarned.gems console.log 'Gems changed', oldEarned.gems, '->', newEarned.gems newLevels = _.difference(newEarned.levels, oldEarned.levels) diff --git a/server/middleware/achievements.coffee b/server/middleware/achievements.coffee index 4939ff235..eb27c41ff 100644 --- a/server/middleware/achievements.coffee +++ b/server/middleware/achievements.coffee @@ -19,7 +19,7 @@ module.exports = unless hasPermission or database.isJustFillingTranslations(req, achievement) throw new errors.Forbidden('Must be an admin, artisan or submitting translations to edit an achievement') - propsWatching = ['query', 'proportionalTo', 'rewards', 'worth'] + propsWatching = ['query', 'proportionalTo', 'rewards', 'worth', 'function'] oldCopy = _.pick(achievement.toObject(), propsWatching) database.assignBody(req, achievement) newCopy = _.pick(achievement.toObject(), propsWatching) diff --git a/spec/server/functional/achievement.spec.coffee b/spec/server/functional/achievement.spec.coffee index 7e6a33085..8ad9afaa0 100644 --- a/spec/server/functional/achievement.spec.coffee +++ b/spec/server/functional/achievement.spec.coffee @@ -109,7 +109,7 @@ describe 'PUT /db/achievement', -> expect(res.body.name).toBe('whatev') done() - it 'touches "updated" if query, proportionalTo, worth, or rewards change', utils.wrap (done) -> + it 'touches "updated" if query, proportionalTo, worth, rewards or function change', utils.wrap (done) -> lastUpdated = @unlockable.get('updated') expect(lastUpdated).toBeDefined() [res, body] = yield request.putAsync {uri: url + '/'+@unlockable.id, json: { @@ -140,6 +140,11 @@ describe 'PUT /db/achievement', -> newWorth = 1000 [res, body] = yield request.putAsync {uri: url + '/'+@unlockable.id, json: {worth: newWorth}} expect(res.body.updated).not.toBe(lastUpdated) + lastUpdated = res.body.updated + + newFunction = { kind: 'logarithmic', parameters: { a: 1, b: 2, c: 3 } } + [res, body] = yield request.putAsync {uri: url + '/'+@unlockable.id, json: {function: newFunction}} + expect(res.body.updated).not.toBe(lastUpdated) done()