UserMembershipAuthorizationTests.coffee 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. sinon = require('sinon')
  2. chai = require('chai')
  3. expect = require('chai').expect
  4. modulePath = "../../../../app/js/Features/UserMembership/UserMembershipAuthorization.js"
  5. SandboxedModule = require('sandboxed-module')
  6. MockRequest = require "../helpers/MockRequest"
  7. EntityConfigs = require("../../../../app/js/Features/UserMembership/UserMembershipEntityConfigs")
  8. Errors = require("../../../../app/js/Features/Errors/Errors")
  9. describe "UserMembershipAuthorization", ->
  10. beforeEach ->
  11. @req = new MockRequest()
  12. @req.params.id = 'mock-entity-id'
  13. @user = _id: 'mock-user-id'
  14. @subscription = { _id: 'mock-subscription-id'}
  15. @AuthenticationController =
  16. getSessionUser: sinon.stub().returns(@user)
  17. @UserMembershipHandler =
  18. getEntity: sinon.stub().yields(null, @subscription)
  19. @AuthorizationMiddlewear =
  20. redirectToRestricted: sinon.stub().yields()
  21. @UserMembershipAuthorization = SandboxedModule.require modulePath, requires:
  22. '../Authentication/AuthenticationController': @AuthenticationController
  23. '../Authorization/AuthorizationMiddlewear': @AuthorizationMiddlewear
  24. './UserMembershipHandler': @UserMembershipHandler
  25. './EntityConfigs': EntityConfigs
  26. '../Errors/Errors': Errors
  27. "logger-sharelatex":
  28. log: ->
  29. err: ->
  30. describe 'requireAccessToEntity', ->
  31. it 'get entity', (done) ->
  32. @UserMembershipAuthorization.requireGroupAccess @req, null, (error) =>
  33. expect(error).to.not.extist
  34. sinon.assert.calledWithMatch(
  35. @UserMembershipHandler.getEntity,
  36. @req.params.id,
  37. modelName: 'Subscription',
  38. @user
  39. )
  40. expect(@req.entity).to.equal @subscription
  41. expect(@req.entityConfig).to.exist
  42. done()
  43. it 'handle entity not found', (done) ->
  44. @UserMembershipHandler.getEntity.yields(null, null)
  45. @UserMembershipAuthorization.requireGroupAccess @req, null, (error) =>
  46. expect(error).to.extist
  47. sinon.assert.called(@AuthorizationMiddlewear.redirectToRestricted)
  48. sinon.assert.called(@UserMembershipHandler.getEntity)
  49. expect(@req.entity).to.not.exist
  50. done()
  51. it 'handle anonymous user', (done) ->
  52. @AuthenticationController.getSessionUser.returns(null)
  53. @UserMembershipAuthorization.requireGroupAccess @req, null, (error) =>
  54. expect(error).to.extist
  55. sinon.assert.called(@AuthorizationMiddlewear.redirectToRestricted)
  56. sinon.assert.notCalled(@UserMembershipHandler.getEntity)
  57. expect(@req.entity).to.not.exist
  58. done()
  59. describe 'requireEntityAccess', ->
  60. it 'handle team access', (done) ->
  61. @UserMembershipAuthorization.requireTeamAccess @req, null, (error) =>
  62. expect(error).to.not.extist
  63. sinon.assert.calledWithMatch(
  64. @UserMembershipHandler.getEntity,
  65. @req.params.id,
  66. fields: primaryKey: 'overleaf.id'
  67. )
  68. done()
  69. it 'handle group access', (done) ->
  70. @UserMembershipAuthorization.requireGroupAccess @req, null, (error) =>
  71. expect(error).to.not.extist
  72. sinon.assert.calledWithMatch(
  73. @UserMembershipHandler.getEntity,
  74. @req.params.id,
  75. translations: title: 'group_account'
  76. )
  77. done()
  78. it 'handle group managers access', (done) ->
  79. @UserMembershipAuthorization.requireGroupManagersAccess @req, null, (error) =>
  80. expect(error).to.not.extist
  81. sinon.assert.calledWithMatch(
  82. @UserMembershipHandler.getEntity,
  83. @req.params.id,
  84. translations: subtitle: 'managers_management'
  85. )
  86. done()
  87. it 'handle institution access', (done) ->
  88. @UserMembershipAuthorization.requireInstitutionAccess @req, null, (error) =>
  89. expect(error).to.not.extist
  90. sinon.assert.calledWithMatch(
  91. @UserMembershipHandler.getEntity,
  92. @req.params.id,
  93. modelName: 'Institution',
  94. )
  95. done()
  96. it 'handle graph access', (done) ->
  97. @req.query.resource_id = 'mock-resource-id'
  98. @req.query.resource_type = 'institution'
  99. middlewear = @UserMembershipAuthorization.requireGraphAccess
  100. middlewear @req, null, (error) =>
  101. expect(error).to.not.extist
  102. sinon.assert.calledWithMatch(
  103. @UserMembershipHandler.getEntity,
  104. @req.query.resource_id,
  105. modelName: 'Institution',
  106. )
  107. done()