mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-27 09:35:39 -05:00
Whoop whoop test for recalculation of gamesCompleted
This commit is contained in:
parent
7a4c6daec8
commit
7a07e1feb0
6 changed files with 88 additions and 5 deletions
|
@ -21,7 +21,7 @@ class EarnedAchievementHandler extends Handler
|
|||
EarnedAchievementHandler.recalculate achievementSlugsOrIDs, onSuccess
|
||||
else
|
||||
EarnedAchievementHandler.recalculate onSuccess
|
||||
@sendSuccess res, {}
|
||||
@sendAccepted res, {}
|
||||
|
||||
# Returns success: boolean
|
||||
# TODO call onFinished
|
||||
|
|
|
@ -47,6 +47,7 @@ module.exports = class Handler
|
|||
|
||||
# sending functions
|
||||
sendUnauthorizedError: (res) -> errors.forbidden(res) #TODO: rename sendUnauthorizedError to sendForbiddenError
|
||||
sendForbiddenError: (res) -> errors.forbidden(res)
|
||||
sendNotFoundError: (res) -> errors.notFound(res)
|
||||
sendMethodNotAllowed: (res) -> errors.badMethod(res)
|
||||
sendBadInputError: (res, message) -> errors.badInput(res, message)
|
||||
|
@ -62,6 +63,18 @@ module.exports = class Handler
|
|||
res.send(message)
|
||||
res.end()
|
||||
|
||||
sendCreated: (res, message) ->
|
||||
res.send 201, message
|
||||
res.end()
|
||||
|
||||
sendAccepted: (res, message) ->
|
||||
res.send 202, message
|
||||
res.end()
|
||||
|
||||
sendNoContent: (res, message) ->
|
||||
res.send 204, message
|
||||
res.end()
|
||||
|
||||
# generic handlers
|
||||
get: (req, res) ->
|
||||
@sendUnauthorizedError(res) if not @hasAccess(req)
|
||||
|
|
|
@ -13,7 +13,7 @@ module.exports.setup = (app) ->
|
|||
parts = module.split('/')
|
||||
module = parts[0]
|
||||
|
||||
return errors.unauthorized(res, 'Must be admin to access this area.') unless req.user?.isAdmin()
|
||||
return errors.forbidden(res, 'Admins only') unless req.user?.isAdmin()
|
||||
|
||||
try
|
||||
moduleName = module.replace '.', '_'
|
||||
|
|
|
@ -375,5 +375,28 @@ UserHandler = class UserHandler extends Handler
|
|||
return @sendNotFoundError res unless remark?
|
||||
@sendSuccess res, remark
|
||||
|
||||
statHandlers:
|
||||
gamesCompleted: (done) ->
|
||||
LevelSession = require '../levels/sessions/LevelSession'
|
||||
|
||||
User.find {}, (err, users) ->
|
||||
async.eachSeries users, ((user, doneWithUser) ->
|
||||
userID = user.get('_id').toHexString()
|
||||
|
||||
LevelSession.find {creator: userID, 'state.completed': true}, (err, sessions) ->
|
||||
completedCount = sessions.length
|
||||
User.findOneAndUpdate {_id: user.get '_id'}, {$set: 'stats.gamesCompleted': completedCount}, (err) ->
|
||||
log.error err if err?
|
||||
doneWithUser()
|
||||
), done
|
||||
|
||||
recalculate: (req, res, statName) ->
|
||||
return @sendForbiddenError(res) unless req.user.isAdmin()
|
||||
|
||||
if statName of @statHandlers
|
||||
@statHandlers[statName] -> log.debug "Finished recalculating stats"
|
||||
return @sendAccepted res, {}
|
||||
else return @sendNotFoundError(res)
|
||||
|
||||
|
||||
module.exports = new UserHandler()
|
||||
|
|
23
test/server/functional/admin.spec.coffee
Normal file
23
test/server/functional/admin.spec.coffee
Normal file
|
@ -0,0 +1,23 @@
|
|||
common = require '../common'
|
||||
|
||||
describe 'recalculate statistics', ->
|
||||
url = getURL '/admin/user/recalculate/'
|
||||
|
||||
it 'does not allow regular users', (done) ->
|
||||
loginJoe ->
|
||||
request.post {uri:url + 'gamesCompleted'}, (err, res, body) ->
|
||||
expect(res.statusCode).toBe 403
|
||||
done()
|
||||
|
||||
it 'responds with a 202 Accepted', (done) ->
|
||||
loginAdmin ->
|
||||
request.post {uri:url + 'gamesCompleted'}, (err, res, body) ->
|
||||
expect(res.statusCode).toBe 202
|
||||
done()
|
||||
|
||||
it 'responds with a 404 when not found', (done) ->
|
||||
loginAdmin ->
|
||||
request.post {uri:url + 'ballsKicked'}, (err, res, body) ->
|
||||
expect(res.statusCode).toBe 404
|
||||
done()
|
||||
|
|
@ -270,9 +270,11 @@ describe 'GET /db/user', ->
|
|||
)
|
||||
|
||||
describe 'statistics', ->
|
||||
it 'games completed', (done) ->
|
||||
LevelSession = require '../../../server/levels/sessions/LevelSession'
|
||||
User = require '../../../server/users/User'
|
||||
UserHandler = require '../../../server/users/user_handler'
|
||||
|
||||
it 'games completed', (done) ->
|
||||
|
||||
session = new LevelSession
|
||||
name: 'Beat Gandalf'
|
||||
|
@ -286,9 +288,31 @@ describe 'statistics', ->
|
|||
session.save (err) ->
|
||||
expect(err).toBeNull()
|
||||
|
||||
User.findOne {_id: joe.get 'id'}, (err, guy) ->
|
||||
User.findById joe.get('id'), (err, guy) ->
|
||||
expect(err).toBeNull()
|
||||
expect(guy.get 'id').toBe joe.get 'id'
|
||||
expect(guy.get 'stats.gamesCompleted').toBe 1
|
||||
|
||||
done()
|
||||
|
||||
it 'recalculates games completed', (done) ->
|
||||
unittest.getNormalJoe (joe) ->
|
||||
loginAdmin ->
|
||||
User.findByIdAndUpdate joe.get('id'), {$set:'stats.gamesCompleted':0}, (err, guy) ->
|
||||
expect(err).toBeNull()
|
||||
expect(guy.get 'id').toBe joe.get 'id'
|
||||
expect(guy.get 'stats.gamesCompleted').toBe 0
|
||||
|
||||
UserHandler.statHandlers.gamesCompleted ->
|
||||
User.findById joe.get('id'), (err, guy) ->
|
||||
expect(err).toBeNull()
|
||||
expect(guy.get 'id').toBe joe.get 'id'
|
||||
expect(guy.get 'stats.gamesCompleted').toBe 1
|
||||
done()
|
||||
|
||||
|
||||
xit 'cleans up', (done) ->
|
||||
clearModels [LevelSession], (err) ->
|
||||
expect(err).toBeNull()
|
||||
|
||||
done()
|
||||
|
|
Loading…
Reference in a new issue