PasswordResetControllerTests.coffee 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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/PasswordResetController"
  7. expect = require("chai").expect
  8. describe "PasswordResetController", ->
  9. beforeEach ->
  10. @settings = {}
  11. @PasswordResetHandler =
  12. generateAndEmailResetToken:sinon.stub()
  13. setNewUserPassword:sinon.stub()
  14. @RateLimiter =
  15. addCount: sinon.stub()
  16. @PasswordResetController = SandboxedModule.require modulePath, requires:
  17. "settings-sharelatex":@settings
  18. "./PasswordResetHandler":@PasswordResetHandler
  19. "logger-sharelatex": log:->
  20. "../../infrastructure/RateLimiter":@RateLimiter
  21. @email = "bob@bob.com "
  22. @token = "my security token that was emailed to me"
  23. @password = "my new password"
  24. @req =
  25. body:
  26. email:@email
  27. passwordResetToken:@token
  28. password:@password
  29. i18n:
  30. translate:->
  31. @res = {}
  32. describe "requestReset", ->
  33. it "should error if the rate limit is hit", (done)->
  34. @PasswordResetHandler.generateAndEmailResetToken.callsArgWith(1)
  35. @RateLimiter.addCount.callsArgWith(1, null, false)
  36. @res.send = (code)=>
  37. code.should.equal 500
  38. @PasswordResetHandler.generateAndEmailResetToken.calledWith(@email.trim()).should.equal false
  39. done()
  40. @PasswordResetController.requestReset @req, @res
  41. it "should tell the handler to process that email", (done)->
  42. @RateLimiter.addCount.callsArgWith(1, null, true)
  43. @PasswordResetHandler.generateAndEmailResetToken.callsArgWith(1)
  44. @res.send = (code)=>
  45. code.should.equal 200
  46. @PasswordResetHandler.generateAndEmailResetToken.calledWith(@email.trim()).should.equal true
  47. done()
  48. @PasswordResetController.requestReset @req, @res
  49. it "should send a 500 if there is an error", (done)->
  50. @RateLimiter.addCount.callsArgWith(1, null, true)
  51. @PasswordResetHandler.generateAndEmailResetToken.callsArgWith(1, "error")
  52. @res.send = (code)=>
  53. code.should.equal 500
  54. done()
  55. @PasswordResetController.requestReset @req, @res
  56. it "should lowercase the email address", (done)->
  57. @email = "UPerCaseEMAIL@example.Com"
  58. @req.body.email = @email
  59. @RateLimiter.addCount.callsArgWith(1, null, true)
  60. @PasswordResetHandler.generateAndEmailResetToken.callsArgWith(1)
  61. @res.send = (code)=>
  62. code.should.equal 200
  63. @PasswordResetHandler.generateAndEmailResetToken.calledWith(@email.toLowerCase()).should.equal true
  64. done()
  65. @PasswordResetController.requestReset @req, @res
  66. describe "setNewUserPassword", ->
  67. it "should tell the user handler to reset the password", (done)->
  68. @PasswordResetHandler.setNewUserPassword.callsArgWith(2)
  69. @res.send = (code)=>
  70. code.should.equal 200
  71. @PasswordResetHandler.setNewUserPassword.calledWith(@token, @password).should.equal true
  72. done()
  73. @PasswordResetController.setNewUserPassword @req, @res
  74. it "should send a 500 if there is an error", (done)->
  75. @PasswordResetHandler.setNewUserPassword.callsArgWith(2, "error")
  76. @res.send = (code)=>
  77. code.should.equal 500
  78. done()
  79. @PasswordResetController.setNewUserPassword @req, @res
  80. it "should error if there is no password", (done)->
  81. @req.body.password = ""
  82. @PasswordResetHandler.setNewUserPassword.callsArgWith(2)
  83. @res.send = (code)=>
  84. code.should.equal 500
  85. @PasswordResetHandler.setNewUserPassword.called.should.equal false
  86. done()
  87. @PasswordResetController.setNewUserPassword @req, @res
  88. it "should error if there is no password", (done)->
  89. @req.body.passwordResetToken = ""
  90. @PasswordResetHandler.setNewUserPassword.callsArgWith(2)
  91. @res.send = (code)=>
  92. code.should.equal 500
  93. @PasswordResetHandler.setNewUserPassword.called.should.equal false
  94. done()
  95. @PasswordResetController.setNewUserPassword @req, @res