UserAffiliationsManagerTests.coffee 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. should = require('chai').should()
  2. expect = require('chai').expect
  3. SandboxedModule = require('sandboxed-module')
  4. assert = require('assert')
  5. path = require('path')
  6. sinon = require('sinon')
  7. modulePath = path.join __dirname, "../../../../app/js/Features/User/UserAffiliationsManager"
  8. expect = require("chai").expect
  9. describe "UserAffiliationsManager", ->
  10. beforeEach ->
  11. @logger = err: sinon.stub(), log: ->
  12. settings = apis: { v1: { url: 'v1.url', user: '', pass: '' } }
  13. @request = sinon.stub()
  14. @UserAffiliationsManager = SandboxedModule.require modulePath, requires:
  15. "logger-sharelatex": @logger
  16. "metrics-sharelatex": timeAsyncMethod: sinon.stub()
  17. 'settings-sharelatex': settings
  18. 'request': @request
  19. @stubbedUser =
  20. _id: "3131231"
  21. name:"bob"
  22. email:"hello@world.com"
  23. @newEmail = "bob@bob.com"
  24. describe 'getAffiliations', ->
  25. it 'get affiliations', (done)->
  26. responseBody = [{ foo: 'bar' }]
  27. @request.callsArgWith(1, null, { statusCode: 201 }, responseBody)
  28. @UserAffiliationsManager.getAffiliations @stubbedUser._id, (err, body) =>
  29. should.not.exist(err)
  30. @request.calledOnce.should.equal true
  31. requestOptions = @request.lastCall.args[0]
  32. expectedUrl = "v1.url/api/v2/users/#{@stubbedUser._id}/affiliations"
  33. requestOptions.url.should.equal expectedUrl
  34. requestOptions.method.should.equal 'GET'
  35. should.not.exist(requestOptions.body)
  36. body.should.equal responseBody
  37. done()
  38. it 'handle error', (done)->
  39. body = errors: 'affiliation error message'
  40. @request.callsArgWith(1, null, { statusCode: 503 }, body)
  41. @UserAffiliationsManager.getAffiliations @stubbedUser._id, (err) =>
  42. should.exist(err)
  43. err.message.should.have.string 503
  44. err.message.should.have.string body.errors
  45. done()
  46. describe 'addAffiliation', ->
  47. beforeEach ->
  48. @request.callsArgWith(1, null, { statusCode: 201 })
  49. it 'add affiliation', (done)->
  50. affiliationOptions =
  51. university: { id: 1 }
  52. role: 'Prof'
  53. department: 'Math'
  54. @UserAffiliationsManager.addAffiliation @stubbedUser._id, @newEmail, affiliationOptions, (err)=>
  55. should.not.exist(err)
  56. @request.calledOnce.should.equal true
  57. requestOptions = @request.lastCall.args[0]
  58. expectedUrl = "v1.url/api/v2/users/#{@stubbedUser._id}/affiliations"
  59. requestOptions.url.should.equal expectedUrl
  60. requestOptions.method.should.equal 'POST'
  61. body = requestOptions.body
  62. Object.keys(body).length.should.equal 4
  63. body.email.should.equal @newEmail
  64. body.university.should.equal affiliationOptions.university
  65. body.department.should.equal affiliationOptions.department
  66. body.role.should.equal affiliationOptions.role
  67. done()
  68. it 'handle error', (done)->
  69. body = errors: 'affiliation error message'
  70. @request.callsArgWith(1, null, { statusCode: 422 }, body)
  71. @UserAffiliationsManager.addAffiliation @stubbedUser._id, @newEmail, {}, (err)=>
  72. should.exist(err)
  73. err.message.should.have.string 422
  74. err.message.should.have.string body.errors
  75. done()
  76. describe 'removeAffiliation', ->
  77. beforeEach ->
  78. @request.callsArgWith(1, null, { statusCode: 404 })
  79. it 'remove affiliation', (done)->
  80. @UserAffiliationsManager.removeAffiliation @stubbedUser._id, @newEmail, (err)=>
  81. should.not.exist(err)
  82. @request.calledOnce.should.equal true
  83. requestOptions = @request.lastCall.args[0]
  84. expectedUrl = "v1.url/api/v2/users/#{@stubbedUser._id}/affiliations/remove"
  85. requestOptions.url.should.equal expectedUrl
  86. requestOptions.method.should.equal 'POST'
  87. expect(requestOptions.body).to.deep.equal { email: @newEmail }
  88. done()
  89. it 'handle error', (done)->
  90. @request.callsArgWith(1, null, { statusCode: 500 })
  91. @UserAffiliationsManager.removeAffiliation @stubbedUser._id, @newEmail, (err)=>
  92. should.exist(err)
  93. err.message.should.exist
  94. done()
  95. describe 'deleteAffiliations', ->
  96. it 'delete affiliations', (done)->
  97. @request.callsArgWith(1, null, { statusCode: 200 })
  98. @UserAffiliationsManager.deleteAffiliations @stubbedUser._id, (err) =>
  99. should.not.exist(err)
  100. @request.calledOnce.should.equal true
  101. requestOptions = @request.lastCall.args[0]
  102. expectedUrl = "v1.url/api/v2/users/#{@stubbedUser._id}/affiliations"
  103. requestOptions.url.should.equal expectedUrl
  104. requestOptions.method.should.equal 'DELETE'
  105. done()
  106. it 'handle error', (done)->
  107. body = errors: 'affiliation error message'
  108. @request.callsArgWith(1, null, { statusCode: 518 }, body)
  109. @UserAffiliationsManager.deleteAffiliations @stubbedUser._id, (err) =>
  110. should.exist(err)
  111. err.message.should.have.string 518
  112. err.message.should.have.string body.errors
  113. done()
  114. describe 'endorseAffiliation', ->
  115. beforeEach ->
  116. @request.callsArgWith(1, null, { statusCode: 204 })
  117. it 'endorse affiliation', (done)->
  118. @UserAffiliationsManager.endorseAffiliation @stubbedUser._id, @newEmail, 'Student','Physics', (err)=>
  119. should.not.exist(err)
  120. @request.calledOnce.should.equal true
  121. requestOptions = @request.lastCall.args[0]
  122. expectedUrl = "v1.url/api/v2/users/#{@stubbedUser._id}/affiliations/endorse"
  123. requestOptions.url.should.equal expectedUrl
  124. requestOptions.method.should.equal 'POST'
  125. body = requestOptions.body
  126. Object.keys(body).length.should.equal 3
  127. body.email.should.equal @newEmail
  128. body.role.should.equal 'Student'
  129. body.department.should.equal 'Physics'
  130. done()