mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-03-14 07:00:01 -04:00
Tweaked, re-enabled achievement specs.
This commit is contained in:
parent
c77d38d59f
commit
e5b87e5158
2 changed files with 130 additions and 131 deletions
|
@ -67,7 +67,7 @@ class EarnedAchievementHandler extends Handler
|
|||
if achievement.get('proportionalTo')
|
||||
return @sendBadInputError(res, 'Cannot currently do this to repeatable docs...')
|
||||
EarnedAchievement.createForAchievement(achievement, trigger, null, (earnedAchievementDoc) =>
|
||||
@sendSuccess(res, earnedAchievementDoc.toObject())
|
||||
@sendCreated(res, earnedAchievementDoc.toObject())
|
||||
)
|
||||
|
||||
)
|
||||
|
|
|
@ -122,134 +122,133 @@ describe 'Achievement', ->
|
|||
|
||||
# TODO: Took level achievements out of this auto achievement business, so fix these tests
|
||||
|
||||
#describe 'Achieving Achievements', ->
|
||||
# it 'wait for achievements to be loaded', (done) ->
|
||||
# Achievement.loadAchievements (achievements) ->
|
||||
# expect(Object.keys(achievements).length).toBe(1)
|
||||
#
|
||||
# loadedAchievements = Achievement.getLoadedAchievements()
|
||||
# expect(Object.keys(loadedAchievements).length).toBe(1)
|
||||
# done()
|
||||
#
|
||||
# it 'saving an object that should trigger an unlockable achievement', (done) ->
|
||||
# unittest.getNormalJoe (joe) ->
|
||||
# session = new LevelSession
|
||||
# permissions: simplePermissions
|
||||
# creator: joe._id
|
||||
# level: original: 'dungeon-arena'
|
||||
# session.save (err, doc) ->
|
||||
# expect(err).toBeNull()
|
||||
# expect(doc).toBeDefined()
|
||||
# expect(doc.creator).toBe(session.creator)
|
||||
# done()
|
||||
#
|
||||
# it 'verify that an unlockable achievement has been earned', (done) ->
|
||||
# unittest.getNormalJoe (joe) ->
|
||||
# EarnedAchievement.find {}, (err, docs) ->
|
||||
# expect(err).toBeNull()
|
||||
# expect(docs.length).toBe(1)
|
||||
# achievement = docs[0]
|
||||
# expect(achievement).toBeDefined()
|
||||
#
|
||||
# expect(achievement.get 'achievement').toBe unlockable._id
|
||||
# expect(achievement.get 'user').toBe joe._id.toHexString()
|
||||
# expect(achievement.get 'notified').toBeFalsy()
|
||||
# expect(achievement.get 'earnedPoints').toBe unlockable.worth
|
||||
# expect(achievement.get 'achievedAmount').toBeUndefined()
|
||||
# expect(achievement.get 'previouslyAchievedAmount').toBeUndefined()
|
||||
# done()
|
||||
#
|
||||
# it 'saving an object that should trigger a repeatable achievement', (done) ->
|
||||
# unittest.getNormalJoe (joe) ->
|
||||
# expect(joe.get 'simulatedBy').toBeFalsy()
|
||||
# joe.set('simulatedBy', 2)
|
||||
# joe.save (err, doc) ->
|
||||
# expect(err).toBeNull()
|
||||
# done()
|
||||
#
|
||||
# it 'verify that a repeatable achievement has been earned', (done) ->
|
||||
# unittest.getNormalJoe (joe) ->
|
||||
# EarnedAchievement.find {achievementName: repeatable.name}, (err, docs) ->
|
||||
# expect(err).toBeNull()
|
||||
# expect(docs.length).toBe(1)
|
||||
# achievement = docs[0]
|
||||
#
|
||||
# expect(achievement.get 'achievement').toBe repeatable._id
|
||||
# expect(achievement.get 'user').toBe joe._id.toHexString()
|
||||
# expect(achievement.get 'notified').toBeFalsy()
|
||||
# expect(achievement.get 'earnedPoints').toBe 2 * repeatable.worth
|
||||
# expect(achievement.get 'achievedAmount').toBe 2
|
||||
# expect(achievement.get 'previouslyAchievedAmount').toBeFalsy()
|
||||
# done()
|
||||
#
|
||||
#
|
||||
# it 'verify that the repeatable achievement with complex exp has been earned', (done) ->
|
||||
# unittest.getNormalJoe (joe) ->
|
||||
# EarnedAchievement.find {achievementName: diminishing.name}, (err, docs) ->
|
||||
# expect(err).toBeNull()
|
||||
# expect(docs.length).toBe 1
|
||||
# achievement = docs[0]
|
||||
#
|
||||
# expect(achievement.get 'achievedAmount').toBe 2
|
||||
# expect(achievement.get 'earnedPoints').toBe (Math.log(.5 * (2 + .5)) + 1) * diminishing.worth
|
||||
#
|
||||
# done()
|
||||
describe 'Level Session Achievement', ->
|
||||
it 'does not generate earned achievements automatically, they need to be created manually', (done) ->
|
||||
unittest.getNormalJoe (joe) ->
|
||||
session = new LevelSession
|
||||
permissions: simplePermissions
|
||||
creator: joe._id
|
||||
level: original: 'dungeon-arena'
|
||||
session.save (err, session) ->
|
||||
expect(err).toBeNull()
|
||||
expect(session).toBeDefined()
|
||||
expect(session.creator).toBe(session.creator)
|
||||
|
||||
EarnedAchievement.find {}, (err, earnedAchievements) ->
|
||||
expect(err).toBeNull()
|
||||
expect(earnedAchievements.length).toBe(0)
|
||||
|
||||
json = {achievement: unlockable._id, triggeredBy: session._id, collection: 'level.sessions'}
|
||||
request.post {uri: getURL('/db/earned_achievement'), json: json}, (err, res, body) ->
|
||||
expect(res.statusCode).toBe(201)
|
||||
expect(body.achievement).toBe unlockable._id+''
|
||||
expect(body.user).toBe joe._id.toHexString()
|
||||
expect(body.notified).toBeFalsy()
|
||||
expect(body.earnedPoints).toBe unlockable.worth
|
||||
expect(body.achievedAmount).toBeUndefined()
|
||||
expect(body.previouslyAchievedAmount).toBeUndefined()
|
||||
done()
|
||||
|
||||
#describe 'Recalculate Achievements', ->
|
||||
# EarnedAchievementHandler = require '../../../server/achievements/earned_achievement_handler'
|
||||
#
|
||||
# it 'remove earned achievements', (done) ->
|
||||
# clearModels [EarnedAchievement], (err) ->
|
||||
# expect(err).toBeNull()
|
||||
# EarnedAchievement.find {}, (err, earned) ->
|
||||
# expect(earned.length).toBe 0
|
||||
#
|
||||
# User.update {}, {$set: {points: 0}}, {multi:true}, (err) ->
|
||||
# expect(err).toBeNull()
|
||||
# done()
|
||||
#
|
||||
# it 'can not be accessed by regular users', (done) ->
|
||||
# loginJoe -> request.post {uri:getURL '/admin/earned_achievement/recalculate'}, (err, res, body) ->
|
||||
# expect(res.statusCode).toBe 403
|
||||
# done()
|
||||
#
|
||||
# it 'can recalculate a selection of achievements', (done) ->
|
||||
# loginAdmin ->
|
||||
# EarnedAchievementHandler.constructor.recalculate ['dungeon-arena-started'], ->
|
||||
# EarnedAchievement.find {}, (err, earnedAchievements) ->
|
||||
# expect(earnedAchievements.length).toBe 1
|
||||
#
|
||||
# # Recalculate again, doesn't change a thing
|
||||
# EarnedAchievementHandler.constructor.recalculate ['dungeon-arena-started'], ->
|
||||
# EarnedAchievement.find {}, (err, earnedAchievements) ->
|
||||
# expect(earnedAchievements.length).toBe 1
|
||||
#
|
||||
# unittest.getNormalJoe (joe) ->
|
||||
# User.findById joe.get('id'), (err, guy) ->
|
||||
# expect(err).toBeNull()
|
||||
# expect(guy.get 'points').toBe unlockable.worth
|
||||
# done()
|
||||
#
|
||||
# it 'can recalculate all achievements', (done) ->
|
||||
# loginAdmin ->
|
||||
# Achievement.count {}, (err, count) ->
|
||||
# expect(count).toBe 3
|
||||
# EarnedAchievementHandler.constructor.recalculate ->
|
||||
# EarnedAchievement.find {}, (err, earnedAchievements) ->
|
||||
# expect(earnedAchievements.length).toBe 3
|
||||
# unittest.getNormalJoe (joe) ->
|
||||
# User.findById joe.get('id'), (err, guy) ->
|
||||
# expect(err).toBeNull()
|
||||
# expect(guy.get 'points').toBe unlockable.worth + 2 * repeatable.worth + (Math.log(.5 * (2 + .5)) + 1) * diminishing.worth
|
||||
# done()
|
||||
#
|
||||
# it 'cleaning up test: deleting all Achievements and related', (done) ->
|
||||
# clearModels [Achievement, EarnedAchievement, LevelSession], (err) ->
|
||||
# expect(err).toBeNull()
|
||||
#
|
||||
# # reset achievements in memory as well
|
||||
# Achievement.resetAchievements()
|
||||
# loadedAchievements = Achievement.getLoadedAchievements()
|
||||
# expect(Object.keys(loadedAchievements).length).toBe(0)
|
||||
#
|
||||
# done()
|
||||
|
||||
describe 'Achieving Achievements', ->
|
||||
it 'wait for achievements to be loaded', (done) ->
|
||||
Achievement.loadAchievements (achievements) ->
|
||||
expect(Object.keys(achievements).length).toBe(1)
|
||||
|
||||
loadedAchievements = Achievement.getLoadedAchievements()
|
||||
expect(Object.keys(loadedAchievements).length).toBe(1)
|
||||
done()
|
||||
|
||||
it 'saving an object that should trigger a repeatable achievement', (done) ->
|
||||
unittest.getNormalJoe (joe) ->
|
||||
expect(joe.get 'simulatedBy').toBeFalsy()
|
||||
joe.set('simulatedBy', 2)
|
||||
joe.save (err, doc) ->
|
||||
expect(err).toBeNull()
|
||||
done()
|
||||
|
||||
it 'verify that a repeatable achievement has been earned', (done) ->
|
||||
unittest.getNormalJoe (joe) ->
|
||||
EarnedAchievement.find {achievementName: repeatable.name}, (err, docs) ->
|
||||
expect(err).toBeNull()
|
||||
expect(docs.length).toBe(1)
|
||||
achievement = docs[0]
|
||||
|
||||
expect(achievement.get 'achievement').toBe repeatable._id
|
||||
expect(achievement.get 'user').toBe joe._id.toHexString()
|
||||
expect(achievement.get 'notified').toBeFalsy()
|
||||
expect(achievement.get 'earnedPoints').toBe 2 * repeatable.worth
|
||||
expect(achievement.get 'achievedAmount').toBe 2
|
||||
expect(achievement.get 'previouslyAchievedAmount').toBeFalsy()
|
||||
done()
|
||||
|
||||
it 'verify that the repeatable achievement with complex exp has been earned', (done) ->
|
||||
unittest.getNormalJoe (joe) ->
|
||||
EarnedAchievement.find {achievementName: diminishing.name}, (err, docs) ->
|
||||
expect(err).toBeNull()
|
||||
expect(docs.length).toBe 1
|
||||
achievement = docs[0]
|
||||
|
||||
expect(achievement.get 'achievedAmount').toBe 2
|
||||
expect(achievement.get 'earnedPoints').toBe (Math.log(.5 * (2 + .5)) + 1) * diminishing.worth
|
||||
|
||||
done()
|
||||
|
||||
describe 'Recalculate Achievements', ->
|
||||
EarnedAchievementHandler = require '../../../server/achievements/earned_achievement_handler'
|
||||
|
||||
it 'remove earned achievements', (done) ->
|
||||
clearModels [EarnedAchievement], (err) ->
|
||||
expect(err).toBeNull()
|
||||
EarnedAchievement.find {}, (err, earned) ->
|
||||
expect(earned.length).toBe 0
|
||||
|
||||
User.update {}, {$set: {points: 0}}, {multi:true}, (err) ->
|
||||
expect(err).toBeNull()
|
||||
done()
|
||||
|
||||
it 'can not be accessed by regular users', (done) ->
|
||||
loginJoe -> request.post {uri:getURL '/admin/earned_achievement/recalculate'}, (err, res, body) ->
|
||||
expect(res.statusCode).toBe 403
|
||||
done()
|
||||
|
||||
it 'can recalculate a selection of achievements', (done) ->
|
||||
loginAdmin ->
|
||||
EarnedAchievementHandler.constructor.recalculate ['dungeon-arena-started'], ->
|
||||
EarnedAchievement.find {}, (err, earnedAchievements) ->
|
||||
expect(earnedAchievements.length).toBe 1
|
||||
|
||||
# Recalculate again, doesn't change a thing
|
||||
EarnedAchievementHandler.constructor.recalculate ['dungeon-arena-started'], ->
|
||||
EarnedAchievement.find {}, (err, earnedAchievements) ->
|
||||
expect(earnedAchievements.length).toBe 1
|
||||
|
||||
unittest.getNormalJoe (joe) ->
|
||||
User.findById joe.get('id'), (err, guy) ->
|
||||
expect(err).toBeNull()
|
||||
expect(guy.get 'points').toBe unlockable.worth
|
||||
done()
|
||||
|
||||
it 'can recalculate all achievements', (done) ->
|
||||
loginAdmin ->
|
||||
Achievement.count {}, (err, count) ->
|
||||
expect(count).toBe 3
|
||||
EarnedAchievementHandler.constructor.recalculate ->
|
||||
EarnedAchievement.find {}, (err, earnedAchievements) ->
|
||||
expect(earnedAchievements.length).toBe 3
|
||||
unittest.getNormalJoe (joe) ->
|
||||
User.findById joe.get('id'), (err, guy) ->
|
||||
expect(err).toBeNull()
|
||||
expect(guy.get 'points').toBe unlockable.worth + 2 * repeatable.worth + (Math.log(.5 * (2 + .5)) + 1) * diminishing.worth
|
||||
done()
|
||||
|
||||
it 'cleaning up test: deleting all Achievements and related', (done) ->
|
||||
clearModels [Achievement, EarnedAchievement, LevelSession], (err) ->
|
||||
expect(err).toBeNull()
|
||||
|
||||
# reset achievements in memory as well
|
||||
Achievement.resetAchievements()
|
||||
loadedAchievements = Achievement.getLoadedAchievements()
|
||||
expect(Object.keys(loadedAchievements).length).toBe(0)
|
||||
|
||||
done()
|
||||
|
|
Loading…
Reference in a new issue