SessionInvalidatorTests.coffee 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. should = require('chai').should()
  2. SandboxedModule = require('sandboxed-module')
  3. assert = require('assert')
  4. path = require('path')
  5. sinon = require('sinon')
  6. modulePath = path.join __dirname, "../../../../app/js/Features/Security/SessionInvalidator"
  7. expect = require("chai").expect
  8. describe "SessionInvaildator", ->
  9. beforeEach ->
  10. @settings =
  11. redis:
  12. web:{}
  13. @rclient =
  14. del:sinon.stub()
  15. set:sinon.stub().callsArgWith(2)
  16. get:sinon.stub()
  17. @SessionInvaildator = SandboxedModule.require modulePath, requires:
  18. "settings-sharelatex":@settings
  19. "logger-sharelatex": log:->
  20. "redis-sharelatex": createClient:=>
  21. return @rclient
  22. @emailAddress = "bob@smith"
  23. @sessionId = "sess:123456"
  24. @stubbedKey = "e_sess:7890"
  25. describe "_getEmailKey", ->
  26. it "should get the email key by hashing it", ->
  27. result = @SessionInvaildator._getEmailKey "bob@smith.com"
  28. result.should.equal "e_sess:6815b961bfb8f83dd4cecd357e55e62d"
  29. describe "tracksession", ->
  30. it "should save the session in redis", (done)->
  31. @SessionInvaildator._getEmailKey = sinon.stub().returns(@stubbedKey)
  32. @SessionInvaildator.tracksession @sessionId, @emailAddress, =>
  33. @rclient.set.calledWith(@stubbedKey).should.equal true
  34. done()
  35. describe "invalidateSession", (done)->
  36. beforeEach ->
  37. @SessionInvaildator._getEmailKey = sinon.stub().returns(@stubbedKey)
  38. @rclient.del.callsArgWith(1)
  39. it "get the session key and delete it", (done)->
  40. @rclient.get.callsArgWith 1, null, @sessionId
  41. @SessionInvaildator.invalidateSession @emailAddress, =>
  42. @rclient.del.calledWith(@sessionId).should.equal true
  43. @rclient.del.calledWith(@stubbedKey).should.equal true
  44. done()