stats.articleEdits are now tracked and tested

This commit is contained in:
Ruben Vereecken 2014-06-24 19:59:36 +02:00
parent 7a07e1feb0
commit 6ae505e8a1
4 changed files with 49 additions and 8 deletions

View file

@ -8,4 +8,17 @@ ArticleSchema.plugin(plugins.VersionedPlugin)
ArticleSchema.plugin(plugins.SearchablePlugin, {searchable: ['body', 'name']})
ArticleSchema.plugin(plugins.PatchablePlugin)
# Assumes every article save is a new version
ArticleSchema.pre 'save', (next) ->
return next() unless @get('creator')
User = require '../users/User' # Avoid mutual inclusion cycles
userID = @get('creator').toHexString()
User.update {_id: userID}, {$inc: 'stats.articleEdits': 1}, {}, (err, docs) ->
log.error err if err?
next()
module.exports = mongoose.model('article', ArticleSchema)

View file

@ -36,11 +36,10 @@ LevelSessionSchema.pre 'save', (next) ->
# newly completed level
if not (initd and previous[id]['state.completed']) and @get('state.completed')
User = require '../../users/User' # Avoid mutual inclusion cycles
User.update {_id: @get 'creator'}, {$inc: {'stats.gamesCompleted': 1}}, {}, (err, count) ->
User.update {_id: @get 'creator'}, {$inc: 'stats.gamesCompleted': 1}, {}, (err, count) ->
log.error err if err?
delete previous[id] if initd
next()
module.exports = LevelSession = mongoose.model('level.session', LevelSessionSchema)

View file

@ -394,7 +394,7 @@ UserHandler = class UserHandler extends Handler
return @sendForbiddenError(res) unless req.user.isAdmin()
if statName of @statHandlers
@statHandlers[statName] -> log.debug "Finished recalculating stats"
@statHandlers[statName]()
return @sendAccepted res, {}
else return @sendNotFoundError(res)

View file

@ -269,13 +269,13 @@ describe 'GET /db/user', ->
done()
)
describe 'statistics', ->
describe 'Statistics', ->
LevelSession = require '../../../server/levels/sessions/LevelSession'
Article = require '../../../server/articles/Article'
User = require '../../../server/users/User'
UserHandler = require '../../../server/users/user_handler'
it 'games completed', (done) ->
it 'keeps track of games completed', (done) ->
session = new LevelSession
name: 'Beat Gandalf'
permissions: simplePermissions
@ -310,9 +310,38 @@ describe 'statistics', ->
expect(guy.get 'stats.gamesCompleted').toBe 1
done()
it 'keeps track of article edits', (done) ->
article = new Article
name: 'My very first'
body: 'I don\'t have much to say I\'m afraid'
xit 'cleans up', (done) ->
clearModels [LevelSession], (err) ->
unittest.getAdmin (carl) ->
expect(carl.get 'stats.articleEdits').toBeUndefined()
article.set 'creator', carl.get 'id'
article.save (err) -> # Creates a new article, version 1.0
expect(err).toBeNull()
User.findById carl.get('id'), (err, guy) ->
expect(err).toBeNull()
expect(guy.get 'id').toBe carl.get 'id'
expect(guy.get 'stats.articleEdits').toBe 1
article.set 'version', {major: 1}
article.set 'body', 'I thought of something!'
article.save (err) -> # Creates a new minor, version 1.1
expect(err).toBeNull()
User.findById carl.get('id'), (err, guy) ->
expect(err).toBeNull()
expect(guy.get 'id').toBe carl.get 'id'
expect(guy.get 'stats.articleEdits').toBe 2
done()
it 'cleans up', (done) ->
clearModels [LevelSession, Article], (err) ->
expect(err).toBeNull()
done()