UserMembershipAuthorizationTests.coffee 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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 'requireEntityAccess', ->
  31. it 'get entity', (done) ->
  32. middlewear = @UserMembershipAuthorization.requireEntityAccess 'group'
  33. middlewear @req, null, (error) =>
  34. expect(error).to.not.extist
  35. sinon.assert.calledWithMatch(
  36. @UserMembershipHandler.getEntity,
  37. @req.params.id,
  38. modelName: 'Subscription',
  39. @user
  40. )
  41. expect(@req.entity).to.equal @subscription
  42. expect(@req.entityConfig).to.exist
  43. done()
  44. it 'handle unknown entity', (done) ->
  45. middlewear = @UserMembershipAuthorization.requireEntityAccess 'foo'
  46. middlewear @req, null, (error) =>
  47. expect(error).to.extist
  48. expect(error).to.be.an.instanceof(Errors.NotFoundError)
  49. sinon.assert.notCalled(@UserMembershipHandler.getEntity)
  50. expect(@req.entity).to.not.exist
  51. done()
  52. it 'handle entity not found', (done) ->
  53. @UserMembershipHandler.getEntity.yields(null, null)
  54. middlewear = @UserMembershipAuthorization.requireEntityAccess 'institution'
  55. middlewear @req, null, (error) =>
  56. expect(error).to.extist
  57. sinon.assert.called(@AuthorizationMiddlewear.redirectToRestricted)
  58. sinon.assert.called(@UserMembershipHandler.getEntity)
  59. expect(@req.entity).to.not.exist
  60. done()
  61. it 'handle anonymous user', (done) ->
  62. @AuthenticationController.getSessionUser.returns(null)
  63. middlewear = @UserMembershipAuthorization.requireEntityAccess 'institution'
  64. middlewear @req, null, (error) =>
  65. expect(error).to.extist
  66. sinon.assert.called(@AuthorizationMiddlewear.redirectToRestricted)
  67. sinon.assert.notCalled(@UserMembershipHandler.getEntity)
  68. expect(@req.entity).to.not.exist
  69. done()
  70. it 'can override entity id', (done) ->
  71. middlewear = @UserMembershipAuthorization.requireEntityAccess 'group', 'entity-id-override'
  72. middlewear @req, null, (error) =>
  73. expect(error).to.not.extist
  74. sinon.assert.calledWithMatch(
  75. @UserMembershipHandler.getEntity,
  76. 'entity-id-override',
  77. )
  78. done()
  79. it "doesn't cache entity id between requests", (done) ->
  80. middlewear = @UserMembershipAuthorization.requireEntityAccess 'group'
  81. middlewear @req, null, (error) =>
  82. expect(error).to.not.extist
  83. lastCallArs = @UserMembershipHandler.getEntity.lastCall.args
  84. expect(lastCallArs[0]).to.equal @req.params.id
  85. newEntityId = 'another-mock-id'
  86. @req.params.id = newEntityId
  87. middlewear @req, null, (error) =>
  88. expect(error).to.not.extist
  89. lastCallArs = @UserMembershipHandler.getEntity.lastCall.args
  90. expect(lastCallArs[0]).to.equal newEntityId
  91. done()