UserUpdaterTests.coffee 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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/User/UserUpdater"
  7. expect = require("chai").expect
  8. describe "UserUpdater", ->
  9. beforeEach ->
  10. @settings = {}
  11. @mongojs =
  12. db:{}
  13. ObjectId:(id)-> return id
  14. @UserGetter =
  15. getUserEmail: sinon.stub()
  16. getUserByAnyEmail: sinon.stub()
  17. ensureUniqueEmailAddress: sinon.stub()
  18. @logger = err: sinon.stub(), log: ->
  19. @UserUpdater = SandboxedModule.require modulePath, requires:
  20. "settings-sharelatex":@settings
  21. "logger-sharelatex": @logger
  22. "./UserGetter": @UserGetter
  23. "../../infrastructure/mongojs":@mongojs
  24. "metrics-sharelatex": timeAsyncMethod: sinon.stub()
  25. @stubbedUser =
  26. _id: "3131231"
  27. name:"bob"
  28. email:"hello@world.com"
  29. @newEmail = "bob@bob.com"
  30. describe 'changeEmailAddress', ->
  31. beforeEach ->
  32. @UserGetter.getUserEmail.callsArgWith(1, null, @stubbedUser.email)
  33. @UserUpdater.addEmailAddress = sinon.stub().callsArgWith(2)
  34. @UserUpdater.setDefaultEmailAddress = sinon.stub().callsArgWith(2)
  35. @UserUpdater.removeEmailAddress = sinon.stub().callsArgWith(2)
  36. it 'change email', (done)->
  37. @UserUpdater.changeEmailAddress @stubbedUser._id, @newEmail, (err)=>
  38. should.not.exist(err)
  39. @UserUpdater.addEmailAddress.calledWith(
  40. @stubbedUser._id, @newEmail
  41. ).should.equal true
  42. @UserUpdater.setDefaultEmailAddress.calledWith(
  43. @stubbedUser._id, @newEmail
  44. ).should.equal true
  45. @UserUpdater.removeEmailAddress.calledWith(
  46. @stubbedUser._id, @stubbedUser.email
  47. ).should.equal true
  48. done()
  49. it 'handle error', (done)->
  50. @UserUpdater.removeEmailAddress.callsArgWith(2, new Error('nope'))
  51. @UserUpdater.changeEmailAddress @stubbedUser._id, @newEmail, (err)=>
  52. should.exist(err)
  53. done()
  54. describe 'addEmailAddress', ->
  55. beforeEach ->
  56. @UserGetter.ensureUniqueEmailAddress = sinon.stub().callsArgWith(1)
  57. it 'add email', (done)->
  58. @UserUpdater.updateUser = sinon.stub().callsArgWith(2, null)
  59. @UserUpdater.addEmailAddress @stubbedUser._id, @newEmail, (err)=>
  60. @UserGetter.ensureUniqueEmailAddress.called.should.equal true
  61. should.not.exist(err)
  62. @UserUpdater.updateUser.calledWith(
  63. @stubbedUser._id,
  64. $push: { emails: { email: @newEmail, createdAt: sinon.match.date } }
  65. ).should.equal true
  66. done()
  67. it 'handle error', (done)->
  68. @UserUpdater.updateUser = sinon.stub().callsArgWith(2, new Error('nope'))
  69. @UserUpdater.addEmailAddress @stubbedUser._id, @newEmail, (err)=>
  70. @logger.err.called.should.equal true
  71. should.exist(err)
  72. done()
  73. describe 'removeEmailAddress', ->
  74. it 'remove email', (done)->
  75. @UserUpdater.updateUser = sinon.stub().callsArgWith(2, null, nMatched: 1)
  76. @UserUpdater.removeEmailAddress @stubbedUser._id, @newEmail, (err)=>
  77. should.not.exist(err)
  78. @UserUpdater.updateUser.calledWith(
  79. { _id: @stubbedUser._id, email: { $ne: @newEmail } },
  80. $pull: { emails: { email: @newEmail } }
  81. ).should.equal true
  82. done()
  83. it 'handle error', (done)->
  84. @UserUpdater.updateUser = sinon.stub().callsArgWith(2, new Error('nope'))
  85. @UserUpdater.removeEmailAddress @stubbedUser._id, @newEmail, (err)=>
  86. should.exist(err)
  87. done()
  88. it 'handle missed update', (done)->
  89. @UserUpdater.updateUser = sinon.stub().callsArgWith(2, null, nMatched: 0)
  90. @UserUpdater.removeEmailAddress @stubbedUser._id, @newEmail, (err)=>
  91. should.exist(err)
  92. done()
  93. describe 'setDefaultEmailAddress', ->
  94. it 'set default', (done)->
  95. @UserUpdater.updateUser = sinon.stub().callsArgWith(2, null, nMatched: 1)
  96. @UserUpdater.setDefaultEmailAddress @stubbedUser._id, @newEmail, (err)=>
  97. should.not.exist(err)
  98. @UserUpdater.updateUser.calledWith(
  99. { _id: @stubbedUser._id, 'emails.email': @newEmail },
  100. $set: { email: @newEmail }
  101. ).should.equal true
  102. done()
  103. it 'handle error', (done)->
  104. @UserUpdater.updateUser = sinon.stub().callsArgWith(2, new Error('nope'))
  105. @UserUpdater.setDefaultEmailAddress @stubbedUser._id, @newEmail, (err)=>
  106. should.exist(err)
  107. done()
  108. it 'handle missed update', (done)->
  109. @UserUpdater.updateUser = sinon.stub().callsArgWith(2, null, nMatched: 0)
  110. @UserUpdater.setDefaultEmailAddress @stubbedUser._id, @newEmail, (err)=>
  111. should.exist(err)
  112. done()