UserMembershipControllerTests.coffee 5.1 KB

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