UserEmailsControllerTests.coffee 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. sinon = require('sinon')
  2. assertCalledWith = sinon.assert.calledWith
  3. assertNotCalled = sinon.assert.notCalled
  4. chai = require('chai')
  5. should = chai.should()
  6. assert = chai.assert
  7. modulePath = "../../../../app/js/Features/User/UserEmailsController.js"
  8. SandboxedModule = require('sandboxed-module')
  9. MockRequest = require "../helpers/MockRequest"
  10. MockResponse = require "../helpers/MockResponse"
  11. describe "UserEmailsController", ->
  12. beforeEach ->
  13. @req = new MockRequest()
  14. @user =
  15. _id: 'mock-user-id'
  16. @UserGetter =
  17. getUserFullEmails: sinon.stub()
  18. @AuthenticationController =
  19. getLoggedInUserId: sinon.stub().returns(@user._id)
  20. @UserUpdater =
  21. addEmailAddress: sinon.stub()
  22. removeEmailAddress: sinon.stub()
  23. setDefaultEmailAddress: sinon.stub()
  24. @EmailHelper =
  25. parseEmail: sinon.stub()
  26. @UserEmailsController = SandboxedModule.require modulePath, requires:
  27. "../Authentication/AuthenticationController": @AuthenticationController
  28. "./UserGetter": @UserGetter
  29. "./UserUpdater": @UserUpdater
  30. "../Helpers/EmailHelper": @EmailHelper
  31. "logger-sharelatex":
  32. log: -> console.log(arguments)
  33. err: ->
  34. describe 'List', ->
  35. beforeEach ->
  36. it 'lists emails', (done) ->
  37. fullEmails = [{some: 'data'}]
  38. @UserGetter.getUserFullEmails.callsArgWith 1, null, fullEmails
  39. @UserEmailsController.list @req,
  40. json: (response) =>
  41. assert.deepEqual response, fullEmails
  42. assertCalledWith @UserGetter.getUserFullEmails, @user._id
  43. done()
  44. it 'handles error', (done) ->
  45. @UserGetter.getUserFullEmails.callsArgWith 1, new Error('Oups')
  46. @UserEmailsController.list @req,
  47. sendStatus: (code) =>
  48. code.should.equal 500
  49. done()
  50. describe 'Add', ->
  51. beforeEach ->
  52. @newEmail = 'new_email@baz.com'
  53. @req.body.email = @newEmail
  54. @EmailHelper.parseEmail.returns @newEmail
  55. it 'adds new email', (done) ->
  56. @UserUpdater.addEmailAddress.callsArgWith 2, null
  57. @UserEmailsController.add @req,
  58. sendStatus: (code) =>
  59. code.should.equal 200
  60. assertCalledWith @EmailHelper.parseEmail, @newEmail
  61. assertCalledWith @UserUpdater.addEmailAddress, @user._id, @newEmail
  62. done()
  63. it 'handles email parse error', (done) ->
  64. @EmailHelper.parseEmail.returns null
  65. @UserEmailsController.add @req,
  66. sendStatus: (code) =>
  67. code.should.equal 422
  68. assertNotCalled @UserUpdater.addEmailAddress
  69. done()
  70. it 'handles error', (done) ->
  71. @UserUpdater.addEmailAddress.callsArgWith 2, new Error('Oups')
  72. @UserEmailsController.add @req,
  73. sendStatus: (code) =>
  74. code.should.equal 500
  75. done()
  76. describe 'remove', ->
  77. beforeEach ->
  78. @email = 'email_to_remove@bar.com'
  79. @req.body.email = @email
  80. @EmailHelper.parseEmail.returns @email
  81. it 'removes email', (done) ->
  82. @UserUpdater.removeEmailAddress.callsArgWith 2, null
  83. @UserEmailsController.remove @req,
  84. sendStatus: (code) =>
  85. code.should.equal 200
  86. assertCalledWith @EmailHelper.parseEmail, @email
  87. assertCalledWith @UserUpdater.removeEmailAddress, @user._id, @email
  88. done()
  89. it 'handles email parse error', (done) ->
  90. @EmailHelper.parseEmail.returns null
  91. @UserEmailsController.remove @req,
  92. sendStatus: (code) =>
  93. code.should.equal 422
  94. assertNotCalled @UserUpdater.removeEmailAddress
  95. done()
  96. it 'handles error', (done) ->
  97. @UserUpdater.removeEmailAddress.callsArgWith 2, new Error('Oups')
  98. @UserEmailsController.remove @req,
  99. sendStatus: (code) =>
  100. code.should.equal 500
  101. done()
  102. describe 'setDefault', ->
  103. beforeEach ->
  104. @email = "email_to_set_default@bar.com"
  105. @req.body.email = @email
  106. @EmailHelper.parseEmail.returns @email
  107. it 'sets default email', (done) ->
  108. @UserUpdater.setDefaultEmailAddress.callsArgWith 2, null
  109. @UserEmailsController.setDefault @req,
  110. sendStatus: (code) =>
  111. code.should.equal 200
  112. assertCalledWith @EmailHelper.parseEmail, @email
  113. assertCalledWith @UserUpdater.setDefaultEmailAddress, @user._id, @email
  114. done()
  115. it 'handles email parse error', (done) ->
  116. @EmailHelper.parseEmail.returns null
  117. @UserEmailsController.setDefault @req,
  118. sendStatus: (code) =>
  119. code.should.equal 422
  120. assertNotCalled @UserUpdater.setDefaultEmailAddress
  121. done()
  122. it 'handles error', (done) ->
  123. @UserUpdater.setDefaultEmailAddress.callsArgWith 2, new Error('Oups')
  124. @UserEmailsController.setDefault @req,
  125. sendStatus: (code) =>
  126. code.should.equal 500
  127. done()