Просмотр исходного кода

Return early if there are no keys to delete

Shane Kilkelly 10 лет назад
Родитель
Сommit
dda0841af3

+ 3 - 0
services/web/app/coffee/Features/User/UserSessionsManager.coffee

@@ -72,6 +72,9 @@ module.exports = UserSessionsManager =
 				logger.err {err, user_id: user._id, sessionSetKey}, "error getting contents of UserSessions set"
 				return callback(err)
 			keysToDelete = _.filter(sessionKeys, (k) -> k not in retain)
+			if keysToDelete.length == 0
+				logger.log {user_id: user._id}, "no sessions in UserSessions set to delete, returning"
+				return callback(null)
 			logger.log {user_id: user._id, count: keysToDelete.length}, "deleting sessions for user"
 			rclient.multi()
 				.del(keysToDelete)

+ 20 - 0
services/web/test/UnitTests/coffee/User/UserSessionsManagerTests.coffee

@@ -339,6 +339,26 @@ describe 'UserSessionsManager', ->
 					@rclient.exec.callCount.should.equal 0
 					done()
 
+		describe 'when there are no keys to delete', ->
+
+			beforeEach ->
+				@rclient.smembers.callsArgWith(1, null, [])
+
+			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 do the delete operation', (done) ->
+				@call (err) =>
+					@rclient.smembers.callCount.should.equal 1
+					@rclient.multi.callCount.should.equal 0
+					@rclient.del.callCount.should.equal 0
+					@rclient.srem.callCount.should.equal 0
+					@rclient.exec.callCount.should.equal 0
+					done()
+
 	describe 'touch', ->
 
 		beforeEach ->