mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-03-14 07:00:01 -04:00
A couple workarounds for crashing server tests. Including method in HipChat error messages. Trying to work around undefined ThangType fetch during level loading.
This commit is contained in:
parent
dbbcfe3789
commit
d2aabbdacc
5 changed files with 28 additions and 22 deletions
|
@ -100,7 +100,9 @@ module.exports = class LevelLoader extends CocoClass
|
|||
@sessionDependenciesRegistered ?= {}
|
||||
heroConfig = session.get('heroConfig')
|
||||
heroConfig ?= me.get('heroConfig') if session is @session and not @headless
|
||||
heroConfig ?= {inventory: {}, thangType: '529ffbf1cf1818f2be000001'} # If all else fails, assign Tharin as the hero.
|
||||
heroConfig ?= {}
|
||||
heroConfig.inventory ?= feet: '53e237bf53457600003e3f05' # If all else fails, assign simple boots.
|
||||
heroConfig.thangType ?= '529ffbf1cf1818f2be000001' # If all else fails, assign Tharin as the hero.
|
||||
session.set 'heroConfig', heroConfig unless _.isEqual heroConfig, session.get('heroConfig')
|
||||
url = "/db/thang.type/#{heroConfig.thangType}/version"
|
||||
if heroResource = @maybeLoadURL(url, ThangType, 'thang')
|
||||
|
|
|
@ -18,7 +18,7 @@ class EarnedAchievementHandler extends Handler
|
|||
get: (req, res) ->
|
||||
return @getByAchievementIDs(req, res) if req.query.view is 'get-by-achievement-ids'
|
||||
unless req.user
|
||||
return @sendDatabaseError(res, "You need to have a user to view earned achievements")
|
||||
return @sendForbiddenError(res, "You need to have a user to view earned achievements")
|
||||
query = { user: req.user._id+''}
|
||||
|
||||
projection = {}
|
||||
|
@ -39,23 +39,23 @@ class EarnedAchievementHandler extends Handler
|
|||
return @sendDatabaseError(res, err) if err
|
||||
documents = (@formatEntity(req, doc) for doc in documents)
|
||||
@sendSuccess(res, documents)
|
||||
|
||||
|
||||
post: (req, res) ->
|
||||
achievementID = req.body.achievement
|
||||
triggeredBy = req.body.triggeredBy
|
||||
collection = req.body.collection
|
||||
if collection isnt 'level.sessions'
|
||||
return @sendBadInputError(res, 'Only doing level session achievements for now.')
|
||||
|
||||
|
||||
model = mongoose.modelNameByCollection(collection)
|
||||
|
||||
|
||||
async.parallel({
|
||||
achievement: (callback) ->
|
||||
Achievement.findById achievementID, (err, achievement) -> callback(err, achievement)
|
||||
|
||||
|
||||
trigger: (callback) ->
|
||||
model.findById triggeredBy, (err, trigger) -> callback(err, trigger)
|
||||
|
||||
|
||||
earned: (callback) ->
|
||||
q = { achievement: achievementID, user: req.user._id+'' }
|
||||
EarnedAchievement.findOne q, (err, earned) -> callback(err, earned)
|
||||
|
@ -89,7 +89,7 @@ class EarnedAchievementHandler extends Handler
|
|||
@sendCreated(res, earnedAchievementDoc.toObject())
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
upsertNonNumericRewards: (user, achievement, done) ->
|
||||
update = {}
|
||||
for rewardType, rewards of achievement.get('rewards') ? {}
|
||||
|
|
|
@ -4,6 +4,7 @@ log = require 'winston'
|
|||
|
||||
module.exports.sendHipChatMessage = sendHipChatMessage = (message) ->
|
||||
return unless key = config.hipchatAPIKey
|
||||
return unless config.isProduction
|
||||
roomID = 254598
|
||||
form =
|
||||
color: 'yellow'
|
||||
|
@ -20,6 +21,7 @@ module.exports.sendTowerHipChatMessage = sendTowerHipChatMessage = (message) ->
|
|||
link = "<a href=\"https://papertrailapp.com/groups/488214/events?time=#{secondsFromEpoch}\">PaperTrail</a>"
|
||||
message = "#{message} #{link}"
|
||||
return unless key = config.hipchatTowerAPIKey
|
||||
return unless config.isProduction
|
||||
roomID = 318356
|
||||
form =
|
||||
color: 'red'
|
||||
|
|
|
@ -43,7 +43,7 @@ setupErrorMiddleware = (app) ->
|
|||
app.use (err, req, res, next) ->
|
||||
if err
|
||||
res.status(500).send(error: "Something went wrong!")
|
||||
message = "Express got an error. Path: #{req.path}, message: #{err.message}"
|
||||
message = "Express error: #{req.method} #{req.path}: #{err.message}"
|
||||
log.error "#{message}, stack: #{err.stack}"
|
||||
hipchat.sendTowerHipChatMessage(message)
|
||||
else
|
||||
|
@ -113,7 +113,7 @@ exports.setupMiddleware = (app) ->
|
|||
setupRedirectMiddleware app
|
||||
setupErrorMiddleware app
|
||||
setupJavascript404s app
|
||||
|
||||
|
||||
###Routing function implementations###
|
||||
|
||||
setupJavascript404s = (app) ->
|
||||
|
|
|
@ -121,7 +121,7 @@ describe 'Achievement', ->
|
|||
done()
|
||||
|
||||
# TODO: Took level achievements out of this auto achievement business, so fix these tests
|
||||
|
||||
|
||||
describe 'Level Session Achievement', ->
|
||||
it 'does not generate earned achievements automatically, they need to be created manually', (done) ->
|
||||
unittest.getNormalJoe (joe) ->
|
||||
|
@ -133,11 +133,11 @@ describe 'Level Session Achievement', ->
|
|||
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)
|
||||
|
@ -149,7 +149,7 @@ describe 'Level Session Achievement', ->
|
|||
expect(body.previouslyAchievedAmount).toBeUndefined()
|
||||
done()
|
||||
|
||||
|
||||
|
||||
describe 'Achieving Achievements', ->
|
||||
it 'wait for achievements to be loaded', (done) ->
|
||||
Achievement.loadAchievements (achievements) ->
|
||||
|
@ -174,12 +174,13 @@ describe 'Achieving Achievements', ->
|
|||
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()
|
||||
if achievement
|
||||
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) ->
|
||||
|
@ -189,8 +190,9 @@ describe 'Achieving Achievements', ->
|
|||
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
|
||||
if achievement
|
||||
expect(achievement.get 'achievedAmount').toBe 2
|
||||
expect(achievement.get 'earnedPoints').toBe (Math.log(.5 * (2 + .5)) + 1) * diminishing.worth
|
||||
|
||||
done()
|
||||
|
||||
|
|
Loading…
Reference in a new issue