UserMembershipControllerTests.coffee 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  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. expect = require('chai').expect
  8. modulePath = "../../../../app/js/Features/UserMembership/UserMembershipController.js"
  9. SandboxedModule = require('sandboxed-module')
  10. MockRequest = require "../helpers/MockRequest"
  11. MockResponse = require "../helpers/MockResponse"
  12. EntityConfigs = require("../../../../app/js/Features/UserMembership/UserMembershipEntityConfigs")
  13. Errors = require("../../../../app/js/Features/Errors/Errors")
  14. describe "UserMembershipController", ->
  15. beforeEach ->
  16. @req = new MockRequest()
  17. @req.params.id = 'mock-entity-id'
  18. @user = _id: 'mock-user-id'
  19. @newUser = _id: 'mock-new-user-id', email: 'new-user-email@foo.bar'
  20. @subscription = { _id: 'mock-subscription-id'}
  21. @institution = _id: 'mock-institution-id', v1Id: 123
  22. @users = [
  23. { _id: 'mock-member-id-1', email: 'mock-email-1@foo.com' }
  24. { _id: 'mock-member-id-2', email: 'mock-email-2@foo.com' }
  25. ]
  26. @AuthenticationController =
  27. getSessionUser: sinon.stub().returns(@user)
  28. @UserMembershipHandler =
  29. getEntity: sinon.stub().yields(null, @subscription)
  30. getUsers: sinon.stub().yields(null, @users)
  31. addUser: sinon.stub().yields(null, @newUser)
  32. removeUser: sinon.stub().yields(null)
  33. @UserMembershipController = SandboxedModule.require modulePath, requires:
  34. '../Authentication/AuthenticationController': @AuthenticationController
  35. './UserMembershipHandler': @UserMembershipHandler
  36. '../Errors/Errors': Errors
  37. "logger-sharelatex":
  38. log: ->
  39. err: ->
  40. describe 'index', ->
  41. beforeEach ->
  42. @req.entity = @subscription
  43. @req.entityConfig = EntityConfigs.group
  44. it 'get users', (done) ->
  45. @UserMembershipController.index @req, render: () =>
  46. sinon.assert.calledWithMatch(
  47. @UserMembershipHandler.getUsers,
  48. @subscription,
  49. modelName: 'Subscription',
  50. )
  51. done()
  52. it 'render group view', (done) ->
  53. @UserMembershipController.index @req, render: (viewPath, viewParams) =>
  54. expect(viewPath).to.equal 'user_membership/index'
  55. expect(viewParams.users).to.deep.equal @users
  56. expect(viewParams.groupSize).to.equal @subscription.membersLimit
  57. expect(viewParams.translations.title).to.equal 'group_account'
  58. expect(viewParams.paths.addMember).to.equal "/manage/groups/#{@subscription._id}/invites"
  59. done()
  60. it 'render group managers view', (done) ->
  61. @req.entityConfig = EntityConfigs.groupManagers
  62. @UserMembershipController.index @req, render: (viewPath, viewParams) =>
  63. expect(viewPath).to.equal 'user_membership/index'
  64. expect(viewParams.groupSize).to.equal undefined
  65. expect(viewParams.translations.title).to.equal 'group_managers'
  66. expect(viewParams.paths.exportMembers).to.be.undefined
  67. done()
  68. it 'render institution view', (done) ->
  69. @req.entity = @institution
  70. @req.entityConfig = EntityConfigs.institution
  71. @UserMembershipController.index @req, render: (viewPath, viewParams) =>
  72. expect(viewPath).to.equal 'user_membership/index'
  73. expect(viewParams.groupSize).to.equal undefined
  74. expect(viewParams.translations.title).to.equal 'institution_managers'
  75. expect(viewParams.paths.exportMembers).to.be.undefined
  76. done()
  77. describe 'add', ->
  78. beforeEach ->
  79. @req.body.email = @newUser.email
  80. @req.entity = @subscription
  81. @req.entityConfig = EntityConfigs.groupManagers
  82. it 'add user', (done) ->
  83. @UserMembershipController.add @req, json: () =>
  84. sinon.assert.calledWithMatch(
  85. @UserMembershipHandler.addUser,
  86. @subscription,
  87. modelName: 'Subscription',
  88. @newUser.email
  89. )
  90. done()
  91. it 'return user object', (done) ->
  92. @UserMembershipController.add @req, json: (payload) =>
  93. payload.user.should.equal @newUser
  94. done()
  95. it 'handle readOnly entity', (done) ->
  96. @req.entityConfig = EntityConfigs.group
  97. @UserMembershipController.add @req, null, (error) =>
  98. expect(error).to.extist
  99. expect(error).to.be.an.instanceof(Errors.NotFoundError)
  100. done()
  101. describe 'remove', ->
  102. beforeEach ->
  103. @req.params.userId = @newUser._id
  104. @req.entity = @subscription
  105. @req.entityConfig = EntityConfigs.groupManagers
  106. it 'remove user', (done) ->
  107. @UserMembershipController.remove @req, send: () =>
  108. sinon.assert.calledWithMatch(
  109. @UserMembershipHandler.removeUser,
  110. @subscription,
  111. modelName: 'Subscription',
  112. @newUser._id
  113. )
  114. done()
  115. it 'handle readOnly entity', (done) ->
  116. @req.entityConfig = EntityConfigs.group
  117. @UserMembershipController.remove @req, null, (error) =>
  118. expect(error).to.extist
  119. expect(error).to.be.an.instanceof(Errors.NotFoundError)
  120. done()
  121. describe "exportCsv", ->
  122. beforeEach ->
  123. @req.entity = @subscription
  124. @req.entityConfig = EntityConfigs.groupManagers
  125. @res = new MockResponse()
  126. @res.contentType = sinon.stub()
  127. @res.header = sinon.stub()
  128. @res.send = sinon.stub()
  129. @UserMembershipController.exportCsv @req, @res
  130. it 'get users', ->
  131. sinon.assert.calledWithMatch(
  132. @UserMembershipHandler.getUsers,
  133. @subscription,
  134. modelName: 'Subscription',
  135. )
  136. it "should set the correct content type on the request", ->
  137. assertCalledWith(@res.contentType, "text/csv")
  138. it "should name the exported csv file", ->
  139. assertCalledWith(
  140. @res.header
  141. "Content-Disposition",
  142. "attachment; filename=Group.csv"
  143. )
  144. it "should export the correct csv", ->
  145. assertCalledWith(@res.send, "mock-email-1@foo.com\nmock-email-2@foo.com\n")