Refactor, spec and fix GET /healthcheck

For #3469
This commit is contained in:
Scott Erickson 2016-05-05 10:01:58 -07:00
parent b125f9b2fa
commit 93f940e196
4 changed files with 62 additions and 33 deletions

View file

@ -0,0 +1,22 @@
wrap = require 'co-express'
errors = require '../commons/errors'
module.exports = wrap (req, res) ->
User = require '../models/User'
user = yield User.findOne({})
throw new errors.InternalServerError('No users found') unless user
hcUser = yield User.findOne(slug: 'healthcheck')
if not hcUser
hcUser = new User({
anonymous: false
name: 'healthcheck'
nameLower: 'healthcheck'
slug: 'healthcheck'
email: 'rob+healthcheck@codecombat.com'
emailLower: 'rob+healthcheck@codecombat.com'
})
hcUser.set 'testGroupNumber', Math.floor(Math.random() * 256) # also in app/core/auth
yield hcUser.save()
activity = hcUser.trackActivity('healthcheck', 1)
yield hcUser.update({activity: activity})
res.status(200).send('OK')

View file

@ -7,6 +7,7 @@ module.exports =
courseInstances: require './course-instances'
courses: require './courses'
files: require './files'
healthcheck: require './healthcheck'
named: require './named'
patchable: require './patchable'
rest: require './rest'

View file

@ -86,36 +86,4 @@ module.exports.setup = (app) ->
app.get('/db/trial.request/:handle', mw.auth.checkHasPermission(['admin']), mw.rest.getByHandle(TrialRequest))
app.put('/db/trial.request/:handle', mw.auth.checkHasPermission(['admin']), mw.trialRequests.put)
app.get '/healthcheck', (req, res) ->
try
async = require 'async'
User = require '../models/User'
async.waterfall [
(callback) ->
User.find({}).limit(1).exec(callback)
, (last, callback) ->
return("No users found") unless callback.length > 0
User.findOne(slug: 'healthcheck').exec(callback)
, (hcuser, callback) ->
# Create health check user if it doesnt exist
return callback(null, hcuser) if hcuser
user = new User
anonymous: false
name: 'healthcheck'
nameLower: 'healthcheck'
slug: 'healthcheck'
email: 'rob+healthcheck@codecombat.com'
emailLower: 'rob+healthcheck@codecombat.com'
user.set 'testGroupNumber', Math.floor(Math.random() * 256) # also in app/core/auth
user.save (err) ->
return callback(err) if err
callback(null, user)
, (hcuser, callback) ->
activity = hcuser.trackActivity 'healthcheck', 1
hcuser.update {activity: activity}, callback
], (err) ->
return res.status(500).send(err.toString()) if err
res.send("OK")
catch error
res.status(500).send(error.toString())
app.get('/healthcheck', mw.healthcheck)

View file

@ -0,0 +1,38 @@
common = require '../common'
request = require '../request'
utils = require '../utils'
User = require '../../../server/models/User'
url = getURL('/healthcheck')
describe 'GET /healthcheck', ->
it 'returns 500 if there are no users in the db', utils.wrap (done) ->
yield utils.clearModels([User])
[res, body] = yield request.getAsync url, {json: true}
expect(res.statusCode).toBe(500)
done()
it 'returns 200 if there is at least one user in the db', utils.wrap (done) ->
yield utils.clearModels([User])
yield utils.initUser()
[res, body] = yield request.getAsync url, {json: true}
expect(res.statusCode).toBe(200)
done()
it 'produces a healthcheck user and tracks how often it is healthchecked', utils.wrap (done) ->
yield utils.clearModels([User])
user = yield User.findOne({slug: 'healthcheck'})
expect(user).toBeNull()
yield utils.initUser()
[res, body] = yield request.getAsync url, {json: true}
expect(res.statusCode).toBe(200)
user = yield User.findOne({slug: 'healthcheck'})
expect(user).toBeTruthy()
expect(user.get('activity').healthcheck.count).toBe(1)
[res, body] = yield request.getAsync url, {json: true}
expect(res.statusCode).toBe(200)
user = yield User.findOne({slug: 'healthcheck'})
expect(user.get('activity').healthcheck.count).toBe(2)
done()