SubscriptionGroupHandlerTests.coffee 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. SandboxedModule = require('sandboxed-module')
  2. should = require('chai').should()
  3. sinon = require 'sinon'
  4. assert = require("chai").assert
  5. modulePath = "../../../../app/js/Features/Subscription/SubscriptionGroupHandler"
  6. describe "Subscription Group Handler", ->
  7. beforeEach ->
  8. @adminUser_id = "12321"
  9. @newEmail = "bob@smith.com"
  10. @user = {_id:"3121321", email:@newEmail}
  11. @SubscriptionLocator =
  12. getUsersSubscription: sinon.stub()
  13. @UserCreator =
  14. getUserOrCreateHoldingAccount: sinon.stub().callsArgWith(1, null, @user)
  15. @SubscriptionUpdater =
  16. addUserToGroup: sinon.stub().callsArgWith(2)
  17. removeUserFromGroup: sinon.stub().callsArgWith(2)
  18. @UserLocator =
  19. findById: sinon.stub()
  20. @LimitationsManager =
  21. hasGroupMembersLimitReached: sinon.stub()
  22. @Handler = SandboxedModule.require modulePath, requires:
  23. "logger-sharelatex": log:->
  24. "../User/UserCreator": @UserCreator
  25. "./SubscriptionUpdater": @SubscriptionUpdater
  26. "./SubscriptionLocator": @SubscriptionLocator
  27. "../User/UserLocator": @UserLocator
  28. "./LimitationsManager": @LimitationsManager
  29. describe "addUserToGroup", ->
  30. it "should find or create the user", (done)->
  31. @LimitationsManager.hasGroupMembersLimitReached.callsArgWith(1, null, false)
  32. @Handler.addUserToGroup @adminUser_id, @newEmail, (err)=>
  33. @UserCreator.getUserOrCreateHoldingAccount.calledWith(@newEmail).should.equal true
  34. done()
  35. it "should add the user to the group", (done)->
  36. @LimitationsManager.hasGroupMembersLimitReached.callsArgWith(1, null, false)
  37. @Handler.addUserToGroup @adminUser_id, @newEmail, (err)=>
  38. @SubscriptionUpdater.addUserToGroup.calledWith(@adminUser_id, @user._id).should.equal true
  39. done()
  40. it "should not add the user to the group if the limit has been reached", (done)->
  41. @LimitationsManager.hasGroupMembersLimitReached.callsArgWith(1, null, true)
  42. @Handler.addUserToGroup @adminUser_id, @newEmail, (err)=>
  43. @SubscriptionUpdater.addUserToGroup.called.should.equal false
  44. done()
  45. it "should return error that limit has been reached", (done)->
  46. @LimitationsManager.hasGroupMembersLimitReached.callsArgWith(1, null, true)
  47. @Handler.addUserToGroup @adminUser_id, @newEmail, (err)=>
  48. err.limitReached.should.equal true
  49. done()
  50. describe "removeUserFromGroup", ->
  51. it "should call the subscription updater to remove the user", (done)->
  52. @Handler.removeUserFromGroup @adminUser_id, @user._id, (err)=>
  53. @SubscriptionUpdater.removeUserFromGroup.calledWith(@adminUser_id, @user._id).should.equal true
  54. done()
  55. describe "getPopulatedListOfMembers", ->
  56. beforeEach ->
  57. @subscription = {}
  58. @SubscriptionLocator.getUsersSubscription.callsArgWith(1, null, @subscription)
  59. @UserLocator.findById.callsArgWith(1, null, {_id:"31232"})
  60. it "should locate the subscription", (done)->
  61. @UserLocator.findById.callsArgWith(1, null, {_id:"31232"})
  62. @Handler.getPopulatedListOfMembers @adminUser_id, (err, users)=>
  63. @SubscriptionLocator.getUsersSubscription.calledWith(@adminUser_id).should.equal true
  64. done()
  65. it "should get the users by id", (done)->
  66. @UserLocator.findById.callsArgWith(1, null, {_id:"31232"})
  67. @subscription.member_ids = ["1234", "342432", "312312"]
  68. @Handler.getPopulatedListOfMembers @adminUser_id, (err, users)=>
  69. @UserLocator.findById.calledWith(@subscription.member_ids[0]).should.equal true
  70. @UserLocator.findById.calledWith(@subscription.member_ids[1]).should.equal true
  71. @UserLocator.findById.calledWith(@subscription.member_ids[2]).should.equal true
  72. users.length.should.equal @subscription.member_ids.length
  73. done()
  74. it "should just return the id if the user can not be found as they may have deleted their account", (done)->
  75. @UserLocator.findById.callsArgWith(1)
  76. @subscription.member_ids = ["1234", "342432", "312312"]
  77. @Handler.getPopulatedListOfMembers @adminUser_id, (err, users)=>
  78. assert.deepEqual users[0], {_id:@subscription.member_ids[0]}
  79. assert.deepEqual users[1], {_id:@subscription.member_ids[1]}
  80. assert.deepEqual users[2], {_id:@subscription.member_ids[2]}
  81. done()