UserMembershipControllerTests.coffee 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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 = [{ _id: 'mock-member-id-1' }, { _id: 'mock-member-id-2' }]
  23. @AuthenticationController =
  24. getSessionUser: sinon.stub().returns(@user)
  25. @UserMembershipHandler =
  26. getEntity: sinon.stub().yields(null, @subscription)
  27. getUsers: sinon.stub().yields(null, @users)
  28. addUser: sinon.stub().yields(null, @newUser)
  29. removeUser: sinon.stub().yields(null)
  30. @UserMembershipController = SandboxedModule.require modulePath, requires:
  31. '../Authentication/AuthenticationController': @AuthenticationController
  32. './UserMembershipHandler': @UserMembershipHandler
  33. '../Errors/Errors': Errors
  34. "logger-sharelatex":
  35. log: ->
  36. err: ->
  37. describe 'index', ->
  38. beforeEach ->
  39. @req.entity = @subscription
  40. @req.entityConfig = EntityConfigs.group
  41. it 'get users', (done) ->
  42. @UserMembershipController.index @req, render: () =>
  43. sinon.assert.calledWithMatch(
  44. @UserMembershipHandler.getUsers,
  45. @subscription,
  46. modelName: 'Subscription',
  47. )
  48. done()
  49. it 'render group view', (done) ->
  50. @UserMembershipController.index @req, render: (viewPath, viewParams) =>
  51. expect(viewPath).to.equal 'user_membership/index'
  52. expect(viewParams.users).to.deep.equal @users
  53. expect(viewParams.groupSize).to.equal @subscription.membersLimit
  54. expect(viewParams.translations.title).to.equal 'group_account'
  55. expect(viewParams.paths.addMember).to.equal '/subscription/invites'
  56. done()
  57. it 'render group managers view', (done) ->
  58. @req.entityConfig = EntityConfigs.groupManagers
  59. @UserMembershipController.index @req, render: (viewPath, viewParams) =>
  60. expect(viewPath).to.equal 'user_membership/index'
  61. expect(viewParams.groupSize).to.equal undefined
  62. expect(viewParams.translations.title).to.equal 'group_managers'
  63. expect(viewParams.paths.exportMembers).to.be.undefined
  64. done()
  65. it 'render institution view', (done) ->
  66. @req.entity = @institution
  67. @req.entityConfig = EntityConfigs.institution
  68. @UserMembershipController.index @req, render: (viewPath, viewParams) =>
  69. expect(viewPath).to.equal 'user_membership/index'
  70. expect(viewParams.groupSize).to.equal undefined
  71. expect(viewParams.translations.title).to.equal 'institution_managers'
  72. expect(viewParams.paths.exportMembers).to.be.undefined
  73. done()
  74. describe 'add', ->
  75. beforeEach ->
  76. @req.body.email = @newUser.email
  77. @req.entity = @subscription
  78. @req.entityConfig = EntityConfigs.groupManagers
  79. it 'add user', (done) ->
  80. @UserMembershipController.add @req, json: () =>
  81. sinon.assert.calledWithMatch(
  82. @UserMembershipHandler.addUser,
  83. @subscription,
  84. modelName: 'Subscription',
  85. @newUser.email
  86. )
  87. done()
  88. it 'return user object', (done) ->
  89. @UserMembershipController.add @req, json: (payload) =>
  90. payload.user.should.equal @newUser
  91. done()
  92. it 'handle readOnly entity', (done) ->
  93. @req.entityConfig = EntityConfigs.group
  94. @UserMembershipController.add @req, null, (error) =>
  95. expect(error).to.extist
  96. expect(error).to.be.an.instanceof(Errors.NotFoundError)
  97. done()
  98. describe 'remove', ->
  99. beforeEach ->
  100. @req.params.userId = @newUser._id
  101. @req.entity = @subscription
  102. @req.entityConfig = EntityConfigs.groupManagers
  103. it 'remove user', (done) ->
  104. @UserMembershipController.remove @req, send: () =>
  105. sinon.assert.calledWithMatch(
  106. @UserMembershipHandler.removeUser,
  107. @subscription,
  108. modelName: 'Subscription',
  109. @newUser._id
  110. )
  111. done()
  112. it 'handle readOnly entity', (done) ->
  113. @req.entityConfig = EntityConfigs.group
  114. @UserMembershipController.remove @req, null, (error) =>
  115. expect(error).to.extist
  116. expect(error).to.be.an.instanceof(Errors.NotFoundError)
  117. done()