codecombat/spec/server/functional/codelog.spec.coffee
Josh Callebaut c4652d82e2 Implements the SPADE logger into the SpellView
* Updates spade.js vendor file, adds a sublime-project for developers to use
* Moves server logic away from handlers
* Moves session update logic to middleware, sets up server schema to autorender IDs as ObjectIDs
* Modernizes the supermodel loading scheme and switches from constructor to initalize
2016-04-26 09:56:30 -07:00

90 lines
2.8 KiB
CoffeeScript

require '../common'
utils = require '../utils'
Promise = require 'bluebird'
request = require '../request'
requestAsync = Promise.promisify(request, {multiArgs: true})
CodeLog = require '../../../server/models/CodeLog'
User = require '../../../server/models/User'
testLog1 = {
'sessionID': ObjectId("55b29efd1cd6abe8ce07db0d")
'level': {
'original': ObjectId("55b29efd1cd6abe8ce07db0d")
'majorVersion': 0
}
'levelSlug': "d"
'userID': ObjectId("55b29efd1cd6abe8ce07db0d")
'userName': "b"
'log': "a"
}
testLog2 = {
'sessionID': ObjectId("55b29efd1cd6abe8ce07db0d")
'level': {
'original': ObjectId("55b29efd1cd6abe8ce07db0d")
'majorVersion': 0
}
'levelSlug': "dbbb"
'userID': ObjectId("55b29efd1cd6abe8ce07db0d")
'userName': "bbbb"
'log': "abbb"
}
describe 'POST /db/codelogs', ->
beforeEach utils.wrap (done) ->
yield utils.clearModels([CodeLog])
user = yield utils.initUser({})
yield utils.loginUser(user)
done()
it 'allows logged in users to create codelogs', utils.wrap (done) ->
[res, body] = yield request.postAsync {
uri: getURL('/db/codelogs'), json: testLog1
}
expect(res.statusCode).toBe(201)
done()
it 'does allow anonymous users to create codelogs', utils.wrap (done) ->
yield utils.becomeAnonymous()
[res, body] = yield request.postAsync {
uri: getURL('/db/codelogs'), json: testLog1
}
expect(res.statusCode).toBe(201)
done()
it 'does not allow unauthenticated users to create codelogs', utils.wrap (done) ->
yield utils.logout()
[res, body] = yield request.postAsync {
uri: getURL('/db/codelogs'), json: testLog1
}
expect(res.statusCode).toBe(401)
done()
describe 'GET /db/codelogs', ->
beforeEach utils.wrap (done) ->
yield utils.clearModels([CodeLog])
# Fill database
@admin = yield utils.initAdmin({})
yield utils.loginUser(@admin)
yield request.postAsync(getURL('/db/codelogs'), {json: testLog1})
yield request.postAsync(getURL('/db/codelogs'), {json: testLog2})
yield utils.logout()
done()
it 'does not allow unauthenticated users to get codelogs', utils.wrap (done) ->
[res, body] = yield request.getAsync {uri:getURL('/db/codelogs'), json:true}
expect(res.statusCode).toBe(401)
done()
it 'does not allow non-admins to get codelogs', utils.wrap (done) ->
user = yield utils.initUser({})
yield utils.loginUser(user)
[res, body] = yield request.getAsync {uri:getURL('/db/codelogs'), json:true}
expect(res.statusCode).toBe(403)
done()
it 'allows admins to get codelogs', utils.wrap (done) ->
admin = yield utils.initAdmin({})
yield utils.loginUser(admin)
[res, body] = yield request.getAsync {uri:getURL('/db/codelogs'), json:true}
expect(body.length).toBe(2)
done()