SubscriptionGroupControllerTests.coffee 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  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. MockResponse = require "../helpers/MockResponse"
  7. describe "SubscriptionGroupController", ->
  8. beforeEach ->
  9. @user = {_id:"!@312431",email:"user@email.com"}
  10. @subscription = {}
  11. @GroupHandler =
  12. addUserToGroup: sinon.stub().callsArgWith(2, null, @user)
  13. removeUserFromGroup: sinon.stub().callsArgWith(2)
  14. isUserPartOfGroup: sinon.stub()
  15. sendVerificationEmail:sinon.stub()
  16. processGroupVerification:sinon.stub()
  17. getPopulatedListOfMembers: sinon.stub().callsArgWith(1, null, [@user])
  18. @SubscriptionLocator = getUsersSubscription: sinon.stub().callsArgWith(1, null, @subscription)
  19. @SubscriptionDomainHandler =
  20. findDomainLicenceBySubscriptionId:sinon.stub()
  21. @OneTimeTokenHandler =
  22. getValueFromTokenAndExpire:sinon.stub()
  23. @ErrorsController =
  24. notFound:sinon.stub()
  25. @Controller = SandboxedModule.require modulePath, requires:
  26. "./SubscriptionGroupHandler":@GroupHandler
  27. "logger-sharelatex": log:->
  28. "./SubscriptionLocator": @SubscriptionLocator
  29. "./SubscriptionDomainHandler":@SubscriptionDomainHandler
  30. "../Errors/ErrorController":@ErrorsController
  31. @adminUserId = "123jlkj"
  32. @subscription_id = "123434325412"
  33. @user_email = "bob@gmail.com"
  34. @req =
  35. session:
  36. user:
  37. _id: @adminUserId
  38. email:@user_email
  39. params:
  40. subscription_id:@subscription_id
  41. query:{}
  42. @token = "super-secret-token"
  43. describe "addUserToGroup", ->
  44. it "should use the admin id for the logged in user and take the email address from the body", (done)->
  45. newEmail = "31231"
  46. @req.body = email: newEmail
  47. res =
  48. json : (data)=>
  49. @GroupHandler.addUserToGroup.calledWith(@adminUserId, newEmail).should.equal true
  50. data.user.should.deep.equal @user
  51. done()
  52. @Controller.addUserToGroup @req, res
  53. describe "removeUserFromGroup", ->
  54. it "should use the admin id for the logged in user and take the email address from the body", (done)->
  55. userIdToRemove = "31231"
  56. @req.params = user_id: userIdToRemove
  57. res =
  58. send : =>
  59. @GroupHandler.removeUserFromGroup.calledWith(@adminUserId, userIdToRemove).should.equal true
  60. done()
  61. @Controller.removeUserFromGroup @req, res
  62. describe "renderSubscriptionGroupAdminPage", ->
  63. it "should redirect you if you don't have a group account", (done)->
  64. @subscription.groupPlan = false
  65. res =
  66. redirect : (path)=>
  67. path.should.equal("/")
  68. done()
  69. @Controller.renderSubscriptionGroupAdminPage @req, res
  70. describe "renderGroupInvitePage", ->
  71. describe "with a valid licence", ->
  72. beforeEach ->
  73. @SubscriptionDomainHandler.findDomainLicenceBySubscriptionId.returns({subscription_id:@subscription_id, adminUser_id:@adminUserId})
  74. it "should render subscriptions/group/invite if not part of group", (done)->
  75. @GroupHandler.isUserPartOfGroup.callsArgWith(2, null, false)
  76. res =
  77. render : (pageName)=>
  78. pageName.should.equal "subscriptions/group/invite"
  79. done()
  80. @Controller.renderGroupInvitePage @req, res
  81. it "should redirect to custom page if is already part of group", (done)->
  82. @GroupHandler.isUserPartOfGroup.callsArgWith(2, null, true)
  83. res =
  84. redirect : (location)=>
  85. location.should.equal "/user/subscription/custom_account"
  86. done()
  87. @Controller.renderGroupInvitePage @req, res
  88. describe "without a valid licence", ->
  89. beforeEach ->
  90. @SubscriptionDomainHandler.findDomainLicenceBySubscriptionId.returns(undefined)
  91. it "should send a 500", (done)->
  92. @Controller.renderGroupInvitePage @req, {}
  93. @ErrorsController.notFound.called.should.equal true
  94. done()
  95. describe "beginJoinGroup", ->
  96. describe "with a valid licence", ->
  97. beforeEach ->
  98. @licenceName = "get amazing licence"
  99. @SubscriptionDomainHandler.findDomainLicenceBySubscriptionId.returns({name:@licenceName})
  100. @GroupHandler.sendVerificationEmail.callsArgWith(3)
  101. it "should ask the SubscriptionGroupHandler to send the verification email", (done)->
  102. res =
  103. sendStatus : (statusCode)=>
  104. statusCode.should.equal 200
  105. @GroupHandler.sendVerificationEmail.calledWith(@subscription_id, @licenceName, @user_email).should.equal true
  106. done()
  107. @Controller.beginJoinGroup @req, res
  108. describe "without a valid licence", ->
  109. beforeEach ->
  110. @SubscriptionDomainHandler.findDomainLicenceBySubscriptionId.returns(undefined)
  111. it "should send a 500", (done)->
  112. @Controller.beginJoinGroup @req, {}
  113. @ErrorsController.notFound.called.should.equal true
  114. done()
  115. describe "completeJoin", ->
  116. describe "with a valid licence", ->
  117. beforeEach ->
  118. @GroupHandler.processGroupVerification.callsArgWith(3)
  119. @SubscriptionDomainHandler.findDomainLicenceBySubscriptionId.returns({name:@licenceName})
  120. it "should redirect to the success page upon processGroupVerification", (done)->
  121. @req.query.token = @token
  122. res =
  123. redirect : (location)=>
  124. @GroupHandler.processGroupVerification.calledWith(@user_email, @subscription_id, @token).should.equal true
  125. location.should.equal "/user/subscription/#{@subscription_id}/group/successful-join"
  126. done()
  127. @Controller.completeJoin @req, res
  128. describe "without a valid licence", ->
  129. it "should send a 500", (done)->
  130. @SubscriptionDomainHandler.findDomainLicenceBySubscriptionId.returns(undefined)
  131. @Controller.completeJoin @req, {}
  132. @ErrorsController.notFound.called.should.equal true
  133. done()
  134. it "should redirect to the invited page with querystring if token was not found", (done)->
  135. @SubscriptionDomainHandler.findDomainLicenceBySubscriptionId.returns({name:@licenceName})
  136. @req.query.token = @token
  137. @GroupHandler.processGroupVerification.callsArgWith(3, "token_not_found")
  138. res =
  139. redirect : (location)=>
  140. location.should.equal "/user/subscription/#{@subscription_id}/group/invited?expired=true"
  141. done()
  142. @Controller.completeJoin @req, res
  143. describe "exportGroupCsv", ->
  144. beforeEach ->
  145. @subscription.groupPlan = true
  146. @res = new MockResponse()
  147. @res.contentType = sinon.stub()
  148. @res.header = sinon.stub()
  149. @res.send = sinon.stub()
  150. @Controller.exportGroupCsv @req, @res
  151. it "should set the correct content type on the request", ->
  152. @res.contentType
  153. .calledWith("text/csv")
  154. .should.equal true
  155. it "should name the exported csv file", ->
  156. @res.header
  157. .calledWith(
  158. "Content-Disposition",
  159. "attachment; filename=Group.csv")
  160. .should.equal true
  161. it "should export the correct csv", ->
  162. @res.send
  163. .calledWith("user@email.com\n")
  164. .should.equal true