SubscriptionGroupControllerTests.coffee 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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/SubscriptionGroupController"
  6. describe "Subscription Group Controller", ->
  7. beforeEach ->
  8. @user = {_id:"!@312431"}
  9. @subscription = {}
  10. @GroupHandler =
  11. addUserToGroup: sinon.stub().callsArgWith(2, null, @user)
  12. removeUserFromGroup: sinon.stub().callsArgWith(2)
  13. isUserPartOfGroup: sinon.stub()
  14. sendVerificationEmail:sinon.stub()
  15. processGroupVerification:sinon.stub()
  16. @SubscriptionLocator = getUsersSubscription: sinon.stub().callsArgWith(1, null, @subscription)
  17. @SubscriptionDomainHandler =
  18. findDomainLicenceBySubscriptionId:sinon.stub()
  19. @OneTimeTokenHandler =
  20. getValueFromTokenAndExpire:sinon.stub()
  21. @ErrorsController =
  22. notFound:sinon.stub()
  23. @Controller = SandboxedModule.require modulePath, requires:
  24. "./SubscriptionGroupHandler":@GroupHandler
  25. "logger-sharelatex": log:->
  26. "./SubscriptionLocator": @SubscriptionLocator
  27. "./SubscriptionDomainHandler":@SubscriptionDomainHandler
  28. "../Errors/ErrorController":@ErrorsController
  29. @adminUserId = "123jlkj"
  30. @subscription_id = "123434325412"
  31. @user_email = "bob@gmail.com"
  32. @req =
  33. session:
  34. user:
  35. _id: @adminUserId
  36. email:@user_email
  37. params:
  38. subscription_id:@subscription_id
  39. query:{}
  40. @token = "super-secret-token"
  41. describe "addUserToGroup", ->
  42. it "should use the admin id for the logged in user and take the email address from the body", (done)->
  43. newEmail = "31231"
  44. @req.body = email: newEmail
  45. res =
  46. json : (data)=>
  47. @GroupHandler.addUserToGroup.calledWith(@adminUserId, newEmail).should.equal true
  48. data.user.should.deep.equal @user
  49. done()
  50. @Controller.addUserToGroup @req, res
  51. describe "removeUserFromGroup", ->
  52. it "should use the admin id for the logged in user and take the email address from the body", (done)->
  53. userIdToRemove = "31231"
  54. @req.params = user_id: userIdToRemove
  55. res =
  56. send : =>
  57. @GroupHandler.removeUserFromGroup.calledWith(@adminUserId, userIdToRemove).should.equal true
  58. done()
  59. @Controller.removeUserFromGroup @req, res
  60. describe "renderSubscriptionGroupAdminPage", ->
  61. it "should redirect you if you don't have a group account", (done)->
  62. @subscription.group = false
  63. res =
  64. redirect : (path)=>
  65. path.should.equal("/")
  66. done()
  67. @Controller.renderSubscriptionGroupAdminPage @req, res
  68. describe "renderGroupInvitePage", ->
  69. describe "with a valid licence", ->
  70. beforeEach ->
  71. @SubscriptionDomainHandler.findDomainLicenceBySubscriptionId.returns({subscription_id:@subscription_id, adminUser_id:@adminUserId})
  72. it "should render subscriptions/group/invite if not part of group", (done)->
  73. @GroupHandler.isUserPartOfGroup.callsArgWith(2, null, false)
  74. res =
  75. render : (pageName)=>
  76. pageName.should.equal "subscriptions/group/invite"
  77. done()
  78. @Controller.renderGroupInvitePage @req, res
  79. it "should redirect to custom page if is already part of group", (done)->
  80. @GroupHandler.isUserPartOfGroup.callsArgWith(2, null, true)
  81. res =
  82. redirect : (location)=>
  83. location.should.equal "/user/subscription/custom_account"
  84. done()
  85. @Controller.renderGroupInvitePage @req, res
  86. describe "without a valid licence", ->
  87. beforeEach ->
  88. @SubscriptionDomainHandler.findDomainLicenceBySubscriptionId.returns(undefined)
  89. it "should send a 500", (done)->
  90. @Controller.renderGroupInvitePage @req, {}
  91. @ErrorsController.notFound.called.should.equal true
  92. done()
  93. describe "beginJoinGroup", ->
  94. describe "with a valid licence", ->
  95. beforeEach ->
  96. @licenceName = "get amazing licence"
  97. @SubscriptionDomainHandler.findDomainLicenceBySubscriptionId.returns({name:@licenceName})
  98. @GroupHandler.sendVerificationEmail.callsArgWith(3)
  99. it "should ask the SubscriptionGroupHandler to send the verification email", (done)->
  100. res =
  101. send : (statusCode)=>
  102. statusCode.should.equal 200
  103. @GroupHandler.sendVerificationEmail.calledWith(@subscription_id, @licenceName, @user_email).should.equal true
  104. done()
  105. @Controller.beginJoinGroup @req, res
  106. describe "without a valid licence", ->
  107. beforeEach ->
  108. @SubscriptionDomainHandler.findDomainLicenceBySubscriptionId.returns(undefined)
  109. it "should send a 500", (done)->
  110. @Controller.beginJoinGroup @req, {}
  111. @ErrorsController.notFound.called.should.equal true
  112. done()
  113. describe "completeJoin", ->
  114. describe "with a valid licence", ->
  115. beforeEach ->
  116. @GroupHandler.processGroupVerification.callsArgWith(3)
  117. @SubscriptionDomainHandler.findDomainLicenceBySubscriptionId.returns({name:@licenceName})
  118. it "should redirect to the success page upon processGroupVerification", (done)->
  119. @req.query.token = @token
  120. res =
  121. redirect : (location)=>
  122. @GroupHandler.processGroupVerification.calledWith(@user_email, @subscription_id, @token).should.equal true
  123. location.should.equal "/user/subscription/#{@subscription_id}/group/successful-join"
  124. done()
  125. @Controller.completeJoin @req, res
  126. describe "without a valid licence", ->
  127. beforeEach ->
  128. @SubscriptionDomainHandler.findDomainLicenceBySubscriptionId.returns(undefined)
  129. it "should send a 500", (done)->
  130. @Controller.completeJoin @req, {}
  131. @ErrorsController.notFound.called.should.equal true
  132. done()