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:
Nick Winter 2014-11-29 08:43:40 -08:00
parent dbbcfe3789
commit d2aabbdacc
5 changed files with 28 additions and 22 deletions

View file

@ -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')

View file

@ -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') ? {}

View file

@ -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'

View file

@ -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) ->

View file

@ -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()