diff --git a/services/web/test/UnitTests/coffee/User/UserSessionsManager.coffee b/services/web/test/UnitTests/coffee/User/UserSessionsManager.coffee index 5e6990ac25..dcb1271d16 100644 --- a/services/web/test/UnitTests/coffee/User/UserSessionsManager.coffee +++ b/services/web/test/UnitTests/coffee/User/UserSessionsManager.coffee @@ -17,12 +17,14 @@ describe 'UserSessionsManager', -> multi: sinon.stub() exec: sinon.stub() get: sinon.stub() + del: sinon.stub() sadd: sinon.stub() srem: sinon.stub() smembers: sinon.stub() expire: sinon.stub() @rclient.multi.returns(@rclient) @rclient.get.returns(@rclient) + @rclient.del.returns(@rclient) @rclient.sadd.returns(@rclient) @rclient.srem.returns(@rclient) @rclient.smembers.returns(@rclient) @@ -242,3 +244,60 @@ describe 'UserSessionsManager', -> @call (err) => @_checkSessions.callCount.should.equal 0 done() + + ## + describe 'revokeAllUserSessions', -> + + beforeEach -> + @sessionKeys = ['one', 'two'] + @rclient.smembers.callsArgWith(1, null, @sessionKeys) + @rclient.exec.callsArgWith(0, null) + @call = (callback) => + @UserSessionsManager.revokeAllUserSessions @user, callback + + 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.smembers.callCount.should.equal 1 + @rclient.multi.callCount.should.equal 1 + @rclient.del.callCount.should.equal 1 + @rclient.del.firstCall.args[0].should.deep.equal(@sessionKeys) + @rclient.srem.callCount.should.equal 1 + @rclient.srem.firstCall.args[1].should.deep.equal(@sessionKeys) + @rclient.exec.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() + + describe 'when no user is supplied', -> + + beforeEach -> + @call = (callback) => + @UserSessionsManager.revokeAllUserSessions 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.smembers.callCount.should.equal 0 + @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()