PasswordResetControllerTests.coffee 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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. @res = {}
  30. describe "requestReset", ->
  31. it "should error if the rate limit is hit", (done)->
  32. @PasswordResetHandler.generateAndEmailResetToken.callsArgWith(1)
  33. @RateLimiter.addCount.callsArgWith(1, null, false)
  34. @res.send = (code)=>
  35. code.should.equal 500
  36. @PasswordResetHandler.generateAndEmailResetToken.calledWith(@email.trim()).should.equal false
  37. done()
  38. @PasswordResetController.requestReset @req, @res
  39. it "should tell the handler to process that email", (done)->
  40. @RateLimiter.addCount.callsArgWith(1, null, true)
  41. @PasswordResetHandler.generateAndEmailResetToken.callsArgWith(1)
  42. @res.send = (code)=>
  43. code.should.equal 200
  44. @PasswordResetHandler.generateAndEmailResetToken.calledWith(@email.trim()).should.equal true
  45. done()
  46. @PasswordResetController.requestReset @req, @res
  47. it "should send a 500 if there is an error", (done)->
  48. @RateLimiter.addCount.callsArgWith(1, null, true)
  49. @PasswordResetHandler.generateAndEmailResetToken.callsArgWith(1, "error")
  50. @res.send = (code)=>
  51. code.should.equal 500
  52. done()
  53. @PasswordResetController.requestReset @req, @res
  54. describe "setNewUserPassword", ->
  55. it "should tell the user handler to reset the password", (done)->
  56. @PasswordResetHandler.setNewUserPassword.callsArgWith(2)
  57. @res.send = (code)=>
  58. code.should.equal 200
  59. @PasswordResetHandler.setNewUserPassword.calledWith(@token, @password).should.equal true
  60. done()
  61. @PasswordResetController.setNewUserPassword @req, @res
  62. it "should send a 500 if there is an error", (done)->
  63. @PasswordResetHandler.setNewUserPassword.callsArgWith(2, "error")
  64. @res.send = (code)=>
  65. code.should.equal 500
  66. done()
  67. @PasswordResetController.setNewUserPassword @req, @res
  68. it "should error if there is no password", (done)->
  69. @req.body.password = ""
  70. @PasswordResetHandler.setNewUserPassword.callsArgWith(2)
  71. @res.send = (code)=>
  72. code.should.equal 500
  73. @PasswordResetHandler.setNewUserPassword.called.should.equal false
  74. done()
  75. @PasswordResetController.setNewUserPassword @req, @res
  76. it "should error if there is no password", (done)->
  77. @req.body.passwordResetToken = ""
  78. @PasswordResetHandler.setNewUserPassword.callsArgWith(2)
  79. @res.send = (code)=>
  80. code.should.equal 500
  81. @PasswordResetHandler.setNewUserPassword.called.should.equal false
  82. done()
  83. @PasswordResetController.setNewUserPassword @req, @res