UserRegistrationHandlerTests.coffee 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. should = require('chai').should()
  2. SandboxedModule = require('sandboxed-module')
  3. assert = require('assert')
  4. path = require('path')
  5. modulePath = path.join __dirname, '../../../../app/js/Features/User/UserRegistrationHandler'
  6. sinon = require("sinon")
  7. expect = require("chai").expect
  8. describe "UserRegistrationHandler", ->
  9. beforeEach ->
  10. @user =
  11. _id: "31j2lk21kjl"
  12. @User =
  13. findOne:sinon.stub()
  14. update: sinon.stub().callsArgWith(2)
  15. @UserCreator =
  16. createNewUser:sinon.stub().callsArgWith(1, null, @user)
  17. @AuthenticationManager =
  18. setUserPassword: sinon.stub().callsArgWith(2)
  19. @NewsLetterManager =
  20. subscribe: sinon.stub().callsArgWith(1)
  21. @EmailHandler =
  22. sendEmail:sinon.stub().callsArgWith(2)
  23. @handler = SandboxedModule.require modulePath, requires:
  24. "../../models/User": {User:@User}
  25. "./UserCreator": @UserCreator
  26. "../Authentication/AuthenticationManager":@AuthenticationManager
  27. "../Newsletter/NewsletterManager":@NewsLetterManager
  28. "../Email/EmailHandler": @EmailHandler
  29. @passingRequest = {email:"something@email.com", password:"123"}
  30. describe 'validate Register Request', ->
  31. it 'allow working account through', ->
  32. result = @handler._registrationRequestIsValid @passingRequest
  33. result.should.equal true
  34. it 'not allow not valid email through ', ()->
  35. @passingRequest.email = "notemail"
  36. result = @handler._registrationRequestIsValid @passingRequest
  37. result.should.equal false
  38. it 'not allow no email through ', ->
  39. @passingRequest.email = ""
  40. result = @handler._registrationRequestIsValid @passingRequest
  41. result.should.equal false
  42. it 'not allow no password through ', ()->
  43. @passingRequest.password= ""
  44. result = @handler._registrationRequestIsValid @passingRequest
  45. result.should.equal false
  46. describe "registerNewUser", ->
  47. describe "holdingAccount", (done)->
  48. beforeEach ->
  49. @user.holdingAccount = true
  50. @handler._registrationRequestIsValid = sinon.stub().returns true
  51. @User.findOne.callsArgWith(1, null, @user)
  52. it "should not create a new user if there is a holding account there", (done)->
  53. @handler.registerNewUser @passingRequest, (err)=>
  54. @UserCreator.createNewUser.called.should.equal false
  55. done()
  56. it "should set holding account to false", (done)->
  57. @handler.registerNewUser @passingRequest, (err)=>
  58. update = @User.update.args[0]
  59. assert.deepEqual update[0], {_id:@user._id}
  60. assert.deepEqual update[1], {"$set":{holdingAccount:false}}
  61. done()
  62. describe "invalidRequest", ->
  63. it "should not create a new user if the the request is not valid", (done)->
  64. @handler._registrationRequestIsValid = sinon.stub().returns false
  65. @handler.registerNewUser @passingRequest, (err)=>
  66. expect(err).to.exist
  67. @UserCreator.createNewUser.called.should.equal false
  68. done()
  69. it "should return email registered in the error if there is a non holdingAccount there", (done)->
  70. @User.findOne.callsArgWith(1, null, {holdingAccount:false})
  71. @handler.registerNewUser @passingRequest, (err)=>
  72. err.should.equal "EmailAlreadyRegisterd"
  73. done()
  74. describe "validRequest", ->
  75. beforeEach ->
  76. @handler._registrationRequestIsValid = sinon.stub().returns true
  77. @User.findOne.callsArgWith 1
  78. it "should create a new user", (done)->
  79. @handler.registerNewUser @passingRequest, (err)=>
  80. @UserCreator.createNewUser.calledWith({email:@passingRequest.email, holdingAccount:false}).should.equal true
  81. done()
  82. it 'lower case email', (done)->
  83. @passingRequest.email = "soMe@eMail.cOm"
  84. @handler.registerNewUser @passingRequest, (err)=>
  85. @UserCreator.createNewUser.calledWith({email:@passingRequest.email.toLowerCase(), holdingAccount:false}).should.equal true
  86. done()
  87. it 'trim white space from email', (done)->
  88. @passingRequest.email = " some@email.com "
  89. @handler.registerNewUser @passingRequest, (err)=>
  90. @UserCreator.createNewUser.calledWith({email:"some@email.com", holdingAccount:false}).should.equal true
  91. done()
  92. it "should set the password", (done)->
  93. @handler.registerNewUser @passingRequest, (err)=>
  94. @AuthenticationManager.setUserPassword.calledWith(@user._id, @passingRequest.password).should.equal true
  95. done()
  96. it "should add the user to the news letter manager", (done)->
  97. @handler.registerNewUser @passingRequest, (err)=>
  98. @NewsLetterManager.subscribe.calledWith(@user).should.equal true
  99. done()
  100. it "should send a welcome email", (done)->
  101. @handler.registerNewUser @passingRequest, (err)=>
  102. @EmailHandler.sendEmail.calledWith("welcome").should.equal true
  103. done()
  104. it "should call the ReferalAllocator", (done)->
  105. done()