diff --git a/services/web/app/coffee/Features/User/UserSessionsManager.coffee b/services/web/app/coffee/Features/User/UserSessionsManager.coffee index 571cfd7b8d..cd8407dd40 100644 --- a/services/web/app/coffee/Features/User/UserSessionsManager.coffee +++ b/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) diff --git a/services/web/test/UnitTests/coffee/User/UserSessionsManagerTests.coffee b/services/web/test/UnitTests/coffee/User/UserSessionsManagerTests.coffee index 4eee728288..9a09aa88f0 100644 --- a/services/web/test/UnitTests/coffee/User/UserSessionsManagerTests.coffee +++ b/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 ->