OneTimeTokenHandlerTests.coffee 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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/OneTimeTokenHandler"
  7. expect = require("chai").expect
  8. describe "OneTimeTokenHandler", ->
  9. beforeEach ->
  10. @value = "user id here"
  11. @stubbedToken = require("crypto").randomBytes(32)
  12. @settings =
  13. redis:
  14. web:{}
  15. @redisMulti =
  16. set:sinon.stub()
  17. get:sinon.stub()
  18. del:sinon.stub()
  19. expire:sinon.stub()
  20. exec:sinon.stub()
  21. self = @
  22. @OneTimeTokenHandler = SandboxedModule.require modulePath, requires:
  23. "redis-sharelatex" :
  24. createClient: =>
  25. auth:->
  26. multi: -> return self.redisMulti
  27. "settings-sharelatex":@settings
  28. "logger-sharelatex": log:->
  29. "crypto": randomBytes: () => @stubbedToken
  30. describe "getNewToken", ->
  31. it "should set a new token into redis with a ttl", (done)->
  32. @redisMulti.exec.callsArgWith(0)
  33. @OneTimeTokenHandler.getNewToken @value, (err, token) =>
  34. @redisMulti.set.calledWith("password_token:#{@stubbedToken.toString("hex")}", @value).should.equal true
  35. @redisMulti.expire.calledWith("password_token:#{@stubbedToken.toString("hex")}", 60 * 60).should.equal true
  36. done()
  37. it "should return if there was an error", (done)->
  38. @redisMulti.exec.callsArgWith(0, "error")
  39. @OneTimeTokenHandler.getNewToken @value, (err, token)=>
  40. err.should.exist
  41. done()
  42. it "should allow the expiry time to be overridden", (done) ->
  43. @redisMulti.exec.callsArgWith(0)
  44. @ttl = 42
  45. @OneTimeTokenHandler.getNewToken @value, {expiresIn: @ttl}, (err, token) =>
  46. @redisMulti.expire.calledWith("password_token:#{@stubbedToken.toString("hex")}", @ttl).should.equal true
  47. done()
  48. describe "getValueFromTokenAndExpire", ->
  49. it "should get and delete the token", (done)->
  50. @redisMulti.exec.callsArgWith(0, null, [@value])
  51. @OneTimeTokenHandler.getValueFromTokenAndExpire @stubbedToken, (err, value)=>
  52. value.should.equal @value
  53. @redisMulti.get.calledWith("password_token:#{@stubbedToken}").should.equal true
  54. @redisMulti.del.calledWith("password_token:#{@stubbedToken}").should.equal true
  55. done()