Browse Source

Test `trackSession`

Shane Kilkelly 10 years ago
parent
commit
2ae2e6ed4f

+ 2 - 4
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

+ 110 - 7
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()