1
0
Fork 0
mirror of https://github.com/overleaf/overleaf.git synced 2025-04-22 23:46:25 +00:00

Test trackSession

This commit is contained in:
Shane Kilkelly 2016-07-04 10:37:01 +01:00
parent a869c99c60
commit 2ae2e6ed4f
2 changed files with 112 additions and 11 deletions
services/web
app/coffee/Features/User
test/UnitTests/coffee/User

View file

@ -31,9 +31,8 @@ module.exports = UserSessionsManager =
if err
logger.err {err, user_id: user._id, sessionSetKey}, "error while adding session key to UserSessions set"
return callback(err)
UserSessionsManager._checkSessions(user, () ->)
callback()
UserSessionsManager._checkSessions(user, () ->)
null
untrackSession: (user, sessionId, callback=(err)-> ) ->
if !user
@ -55,9 +54,8 @@ module.exports = UserSessionsManager =
if err
logger.err {err, user_id: user._id, sessionSetKey}, "error while removing session key from UserSessions set"
return callback(err)
UserSessionsManager._checkSessions(user, () ->)
callback()
UserSessionsManager._checkSessions(user, () ->)
null
revokeAllUserSessions: (user, callback=(err)->) ->
if !user

View file

@ -12,16 +12,25 @@ describe 'UserSessionsManager', ->
_id: "abcd"
email: "user@example.com"
@sessionId = 'some_session_id'
@rclient =
multi: () => @rclient
multi: sinon.stub()
exec: sinon.stub()
get: sinon.stub().returns(@rclient)
sadd: sinon.stub().returns(@rclient)
srem: sinon.stub().returns(@rclient)
smembers: sinon.stub().returns(@rclient)
expire: sinon.stub().returns(@rclient)
get: sinon.stub()
sadd: sinon.stub()
srem: sinon.stub()
smembers: sinon.stub()
expire: sinon.stub()
@rclient.multi.returns(@rclient)
@rclient.get.returns(@rclient)
@rclient.sadd.returns(@rclient)
@rclient.srem.returns(@rclient)
@rclient.smembers.returns(@rclient)
@rclient.expire.returns(@rclient)
@rclient.exec.callsArgWith(0, null)
@redis =
createClient: () -> @rclient
createClient: () => @rclient
@logger =
err: sinon.stub()
error: sinon.stub()
@ -45,3 +54,97 @@ describe 'UserSessionsManager', ->
it 'should build the correct key', ->
result = @UserSessionsManager._sessionKey(@sessionId)
result.should.equal 'sess:some_session_id'
describe 'trackSession', ->
beforeEach ->
@call = (callback) =>
@UserSessionsManager.trackSession @user, @sessionId, callback
@rclient.exec.callsArgWith(0, null)
@_checkSessions = sinon.stub(@UserSessionsManager, '_checkSessions').returns(null)
afterEach ->
@_checkSessions.restore()
it 'should not produce an error', (done) ->
@call (err) =>
expect(err).to.not.be.instanceof Error
done()
it 'should call the appropriate redis methods', (done) ->
@call (err) =>
@rclient.multi.callCount.should.equal 1
@rclient.sadd.callCount.should.equal 1
@rclient.expire.callCount.should.equal 1
@rclient.exec.callCount.should.equal 1
done()
it 'should call _checkSessions', (done) ->
@call (err) =>
@_checkSessions.callCount.should.equal 1
done()
describe 'when rclient produces an error', ->
beforeEach ->
@rclient.exec.callsArgWith(0, new Error('woops'))
it 'should produce an error', (done) ->
@call (err) =>
expect(err).to.be.instanceof Error
done()
it 'should not call _checkSessions', (done) ->
@call (err) =>
@_checkSessions.callCount.should.equal 0
done()
describe 'when no user is supplied', ->
beforeEach ->
@call = (callback) =>
@UserSessionsManager.trackSession null, @sessionId, callback
it 'should not produce an error', (done) ->
@call (err) =>
expect(err).to.not.be.instanceof Error
expect(err).to.equal null
done()
it 'should not call the appropriate redis methods', (done) ->
@call (err) =>
@rclient.multi.callCount.should.equal 0
@rclient.sadd.callCount.should.equal 0
@rclient.expire.callCount.should.equal 0
@rclient.exec.callCount.should.equal 0
done()
it 'should not call _checkSessions', (done) ->
@call (err) =>
@_checkSessions.callCount.should.equal 0
done()
describe 'when no sessionId is supplied', ->
beforeEach ->
@call = (callback) =>
@UserSessionsManager.trackSession @user, null, callback
it 'should not produce an error', (done) ->
@call (err) =>
expect(err).to.not.be.instanceof Error
expect(err).to.equal null
done()
it 'should not call the appropriate redis methods', (done) ->
@call (err) =>
@rclient.multi.callCount.should.equal 0
@rclient.sadd.callCount.should.equal 0
@rclient.expire.callCount.should.equal 0
@rclient.exec.callCount.should.equal 0
done()
it 'should not call _checkSessions', (done) ->
@call (err) =>
@_checkSessions.callCount.should.equal 0
done()