PasswordResetHandlerTests.coffee 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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/PasswordReset/PasswordResetHandler"
  7. expect = require("chai").expect
  8. describe "PasswordResetHandler", ->
  9. beforeEach ->
  10. @settings =
  11. siteUrl: "www.sharelatex.com"
  12. @OneTimeTokenHandler =
  13. getNewToken:sinon.stub()
  14. getValueFromTokenAndExpire:sinon.stub()
  15. @UserGetter =
  16. getUser:sinon.stub()
  17. @EmailHandler =
  18. sendEmail:sinon.stub()
  19. @AuthenticationManager =
  20. setUserPassword:sinon.stub()
  21. @PasswordResetHandler = SandboxedModule.require modulePath, requires:
  22. "../User/UserGetter": @UserGetter
  23. "../Security/OneTimeTokenHandler": @OneTimeTokenHandler
  24. "../Email/EmailHandler":@EmailHandler
  25. "../Authentication/AuthenticationManager":@AuthenticationManager
  26. "settings-sharelatex": @settings
  27. "logger-sharelatex":
  28. log:->
  29. err:->
  30. @token = "12312321i"
  31. @user_id = "user_id_here"
  32. @user =
  33. email :"bob@bob.com"
  34. @password = "my great secret password"
  35. describe "generateAndEmailResetToken", ->
  36. it "should check the user exists", (done)->
  37. @UserGetter.getUser.callsArgWith(1)
  38. @OneTimeTokenHandler.getNewToken.callsArgWith(1)
  39. @PasswordResetHandler.generateAndEmailResetToken @user.email, (err, exists)=>
  40. exists.should.equal false
  41. done()
  42. it "should send the email with the token", (done)->
  43. @UserGetter.getUser.callsArgWith(1, null, @user)
  44. @OneTimeTokenHandler.getNewToken.callsArgWith(1, null, @token)
  45. @EmailHandler.sendEmail.callsArgWith(2)
  46. @PasswordResetHandler.generateAndEmailResetToken @user.email, (err, exists)=>
  47. @EmailHandler.sendEmail.called.should.equal true
  48. exists.should.equal true
  49. args = @EmailHandler.sendEmail.args[0]
  50. args[0].should.equal "passwordResetRequested"
  51. args[1].setNewPasswordUrl.should.equal "#{@settings.siteUrl}/user/password/set?passwordResetToken=#{@token}&email=#{encodeURIComponent(@user.email)}"
  52. done()
  53. it "should return exists = false for a holdingAccount", (done) ->
  54. @user.holdingAccount = true
  55. @UserGetter.getUser.callsArgWith(1, null, @user)
  56. @OneTimeTokenHandler.getNewToken.callsArgWith(1)
  57. @PasswordResetHandler.generateAndEmailResetToken @user.email, (err, exists)=>
  58. exists.should.equal false
  59. done()
  60. describe "setNewUserPassword", ->
  61. it "should return false if no user id can be found", (done)->
  62. @OneTimeTokenHandler.getValueFromTokenAndExpire.callsArgWith(1)
  63. @PasswordResetHandler.setNewUserPassword @token, @password, (err, found) =>
  64. found.should.equal false
  65. @AuthenticationManager.setUserPassword.called.should.equal false
  66. done()
  67. it "should set the user password", (done)->
  68. @OneTimeTokenHandler.getValueFromTokenAndExpire.callsArgWith(1, null, @user_id)
  69. @AuthenticationManager.setUserPassword.callsArgWith(2)
  70. @PasswordResetHandler.setNewUserPassword @token, @password, (err, found, user_id) =>
  71. found.should.equal true
  72. user_id.should.equal @user_id
  73. @AuthenticationManager.setUserPassword.calledWith(@user_id, @password).should.equal true
  74. done()