UserCreatorTests.coffee 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. sinon = require('sinon')
  2. chai = require('chai')
  3. assert = require("assert")
  4. should = chai.should()
  5. modulePath = "../../../../app/js/Features/User/UserCreator.js"
  6. SandboxedModule = require('sandboxed-module')
  7. describe "UserCreator", ->
  8. beforeEach ->
  9. self = @
  10. @user = {_id:"12390i"}
  11. @user.save = sinon.stub().callsArgWith(0)
  12. @UserModel = class Project
  13. constructor: ->
  14. return self.user
  15. @UserLocator =
  16. findByEmail: sinon.stub()
  17. @UserCreator = SandboxedModule.require modulePath, requires:
  18. "../../models/User": User:@UserModel
  19. "./UserLocator":@UserLocator
  20. "logger-sharelatex":{log:->}
  21. @email = "bob.oswald@gmail.com"
  22. describe "getUserOrCreateHoldingAccount", ->
  23. it "should immediately return the user if found", (done)->
  24. @UserLocator.findByEmail.callsArgWith(1, null, @user)
  25. @UserCreator.getUserOrCreateHoldingAccount @email, (err, returnedUser)=>
  26. assert.deepEqual returnedUser, @user
  27. done()
  28. it "should create new holding account if the user is not found", (done)->
  29. @UserLocator.findByEmail.callsArgWith(1)
  30. @UserCreator.createNewUser = sinon.stub().callsArgWith(1, null, @user)
  31. @UserCreator.getUserOrCreateHoldingAccount @email, (err, returnedUser)=>
  32. @UserCreator.createNewUser.calledWith(email:@email, holdingAccount:true).should.equal true
  33. assert.deepEqual returnedUser, @user
  34. done()
  35. describe "createNewUser", ->
  36. it "should take the opts and put them in the model", (done)->
  37. opts =
  38. email:@email
  39. holdingAccount:true
  40. @UserCreator.createNewUser opts, (err, user)=>
  41. assert.equal user.email, @email
  42. assert.equal user.holdingAccount, true
  43. assert.equal user.first_name, "bob.oswald"
  44. done()
  45. it "should use the start of the email if the first name is empty string", (done)->
  46. opts =
  47. email:@email
  48. holdingAccount:true
  49. first_name:""
  50. @UserCreator.createNewUser opts, (err, user)=>
  51. assert.equal user.email, @email
  52. assert.equal user.holdingAccount, true
  53. assert.equal user.first_name, "bob.oswald"
  54. done()
  55. it "should use the first name if passed", (done)->
  56. opts =
  57. email:@email
  58. holdingAccount:true
  59. first_name:"fiiirstname"
  60. @UserCreator.createNewUser opts, (err, user)=>
  61. assert.equal user.email, @email
  62. assert.equal user.holdingAccount, true
  63. assert.equal user.first_name, "fiiirstname"
  64. done()
  65. it "should use the last name if passed", (done)->
  66. opts =
  67. email:@email
  68. holdingAccount:true
  69. last_name:"lastNammmmeee"
  70. @UserCreator.createNewUser opts, (err, user)=>
  71. assert.equal user.email, @email
  72. assert.equal user.holdingAccount, true
  73. assert.equal user.last_name, "lastNammmmeee"
  74. done()