瀏覽代碼

test the `retain` option to `revokeAllUserSessions`.

Shane Kilkelly 10 年之前
父節點
當前提交
0362fee60f
共有 1 個文件被更改,包括 35 次插入 和 3 次删除
  1. 35 3
      services/web/test/UnitTests/coffee/User/UserSessionsManagerTests.coffee

+ 35 - 3
services/web/test/UnitTests/coffee/User/UserSessionsManagerTests.coffee

@@ -250,11 +250,12 @@ describe 'UserSessionsManager', ->
 	describe 'revokeAllUserSessions', ->
 	describe 'revokeAllUserSessions', ->
 
 
 		beforeEach ->
 		beforeEach ->
-			@sessionKeys = ['one', 'two']
+			@sessionKeys = ['sess:one', 'sess:two']
+			@retain = []
 			@rclient.smembers.callsArgWith(1, null, @sessionKeys)
 			@rclient.smembers.callsArgWith(1, null, @sessionKeys)
 			@rclient.exec.callsArgWith(0, null)
 			@rclient.exec.callsArgWith(0, null)
 			@call = (callback) =>
 			@call = (callback) =>
-				@UserSessionsManager.revokeAllUserSessions @user, [], callback
+				@UserSessionsManager.revokeAllUserSessions @user, @retain, callback
 
 
 		it 'should not produce an error', (done) ->
 		it 'should not produce an error', (done) ->
 			@call (err) =>
 			@call (err) =>
@@ -276,6 +277,37 @@ describe 'UserSessionsManager', ->
 				@rclient.exec.callCount.should.equal 1
 				@rclient.exec.callCount.should.equal 1
 				done()
 				done()
 
 
+		describe 'when a session is retained', ->
+
+			beforeEach ->
+				@sessionKeys = ['sess:one', 'sess:two', 'sess:three', 'sess:four']
+				@retain = ['two']
+				@rclient.smembers.callsArgWith(1, null, @sessionKeys)
+				@rclient.exec.callsArgWith(0, null)
+				@call = (callback) =>
+					@UserSessionsManager.revokeAllUserSessions @user, @retain, 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 call the appropriate redis methods', (done) ->
+				@call (err) =>
+					@rclient.smembers.callCount.should.equal 1
+					@rclient.multi.callCount.should.equal 1
+					@rclient.del.callCount.should.equal 1
+					@rclient.srem.callCount.should.equal 1
+					@rclient.exec.callCount.should.equal 1
+					done()
+
+			it 'should remove all sessions except for the retained one', (done) ->
+				@call (err) =>
+					expect(@rclient.del.firstCall.args[0]).to.deep.equal(['sess:one', 'sess:three', 'sess:four'])
+					expect(@rclient.srem.firstCall.args[1]).to.deep.equal(['sess:one', 'sess:three', 'sess:four'])
+					done()
+
 		describe 'when rclient produces an error', ->
 		describe 'when rclient produces an error', ->
 
 
 			beforeEach ->
 			beforeEach ->
@@ -290,7 +322,7 @@ describe 'UserSessionsManager', ->
 
 
 			beforeEach ->
 			beforeEach ->
 				@call = (callback) =>
 				@call = (callback) =>
-					@UserSessionsManager.revokeAllUserSessions null, [], callback
+					@UserSessionsManager.revokeAllUserSessions null, @retain, callback
 
 
 			it 'should not produce an error', (done) ->
 			it 'should not produce an error', (done) ->
 				@call (err) =>
 				@call (err) =>