From 2ae2e6ed4f4a56830af15fe5a45f08712e70787e Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Mon, 4 Jul 2016 10:37:01 +0100 Subject: [PATCH] Test `trackSession` --- .../Features/User/UserSessionsManager.coffee | 6 +- .../coffee/User/UserSessionsManager.coffee | 117 ++++++++++++++++-- 2 files changed, 112 insertions(+), 11 deletions(-) diff --git a/services/web/app/coffee/Features/User/UserSessionsManager.coffee b/services/web/app/coffee/Features/User/UserSessionsManager.coffee index 87d5398b8a..d64fd7d846 100644 --- a/services/web/app/coffee/Features/User/UserSessionsManager.coffee +++ b/services/web/app/coffee/Features/User/UserSessionsManager.coffee @@ -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 diff --git a/services/web/test/UnitTests/coffee/User/UserSessionsManager.coffee b/services/web/test/UnitTests/coffee/User/UserSessionsManager.coffee index 9aca469a3b..a995ccc1c8 100644 --- a/services/web/test/UnitTests/coffee/User/UserSessionsManager.coffee +++ b/services/web/test/UnitTests/coffee/User/UserSessionsManager.coffee @@ -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()