mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-04-07 18:44:29 -04:00
Fix EarnedAchievement.upsertFor to handle achievements that had no rewards
This commit is contained in:
parent
00d6d588ec
commit
1fb7996f6c
2 changed files with 29 additions and 1 deletions
|
@ -40,7 +40,7 @@ EarnedAchievementSchema.statics.upsertFor = (achievement, trigger, earned, user)
|
|||
|
||||
for rewardType, rewards of achievement.get('rewards') ? {}
|
||||
if rewardType is 'gems'
|
||||
update.$inc['earned.gems'] = rewards - (actuallyEarned.gems ? 0)
|
||||
update.$inc['earned.gems'] = rewards - (actuallyEarned?.gems ? 0)
|
||||
else if rewards.length
|
||||
update.$addToSet ?= {}
|
||||
update.$addToSet["earned.#{rewardType}"] = { $each: rewards }
|
||||
|
|
|
@ -298,6 +298,34 @@ describe 'POST /db/earned_achievement', ->
|
|||
user = yield User.findById(user.id)
|
||||
expect(user.get('earned').gems).toBe(100)
|
||||
done()
|
||||
|
||||
it 'handles if the achievement previously did not have any rewards', utils.wrap (done) ->
|
||||
# make unlockable have no rewards
|
||||
yield @unlockable.update({$unset: {rewards: ''}})
|
||||
|
||||
user = yield utils.initUser()
|
||||
yield utils.loginUser(user)
|
||||
|
||||
# get the User the unlockable achievement, check that they got NO reward
|
||||
session = new LevelSession({
|
||||
permissions: simplePermissions
|
||||
creator: user._id
|
||||
level: original: 'dungeon-arena'
|
||||
})
|
||||
yield session.save()
|
||||
json = {achievement: @unlockable.id, triggeredBy: session._id, collection: 'level.sessions'}
|
||||
[res, body] = yield request.postAsync { url: eaURL, json }
|
||||
user = yield User.findById(user.id)
|
||||
expect(user.get('earned.gems')).toBe(0)
|
||||
|
||||
# change the achievement
|
||||
yield @unlockable.update({ $set: { 'rewards': {gems:100} } })
|
||||
|
||||
# hit the endpoint again, make sure gems were added
|
||||
[res, body] = yield request.postAsync { url: eaURL, json }
|
||||
user = yield User.findById(user.id)
|
||||
expect(user.get('earned').gems).toBe(100)
|
||||
done()
|
||||
|
||||
describe 'automatically achieving achievements', ->
|
||||
beforeEach addAllAchievements
|
||||
|
|
Loading…
Add table
Reference in a new issue