SubscriptionTests.coffee 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. expect = require("chai").expect
  2. async = require("async")
  3. UserClient = require "./helpers/User"
  4. request = require "./helpers/request"
  5. settings = require "settings-sharelatex"
  6. {ObjectId} = require("../../../app/js/infrastructure/mongojs")
  7. Subscription = require("../../../app/js/models/Subscription").Subscription
  8. User = require("../../../app/js/models/User").User
  9. MockV1Api = require "./helpers/MockV1Api"
  10. syncUserAndGetFeatures = (user, callback = (error, features) ->) ->
  11. request {
  12. method: 'POST',
  13. url: "/user/#{user._id}/features/sync",
  14. auth:
  15. user: 'sharelatex'
  16. pass: 'password'
  17. sendImmediately: true
  18. }, (error, response, body) ->
  19. throw error if error?
  20. expect(response.statusCode).to.equal 200
  21. User.findById user._id, (error, user) ->
  22. return callback(error) if error?
  23. features = user.toObject().features
  24. delete features.$init # mongoose internals
  25. return callback null, features
  26. describe "Subscriptions", ->
  27. beforeEach (done) ->
  28. @user = new UserClient()
  29. @user.ensureUserExists (error) ->
  30. throw error if error?
  31. done()
  32. describe "when user has no subscriptions", ->
  33. it "should set their features to the basic set", (done) ->
  34. syncUserAndGetFeatures @user, (error, features) =>
  35. throw error if error?
  36. expect(features).to.deep.equal(settings.defaultFeatures)
  37. done()
  38. describe "when the user has an individual subscription", ->
  39. beforeEach ->
  40. Subscription.create {
  41. admin_id: @user._id
  42. planCode: 'collaborator'
  43. customAccount: true
  44. } # returns a promise
  45. it "should set their features to the upgraded set", (done) ->
  46. syncUserAndGetFeatures @user, (error, features) =>
  47. throw error if error?
  48. plan = settings.plans.find (plan) -> plan.planCode == 'collaborator'
  49. expect(features).to.deep.equal(plan.features)
  50. done()
  51. describe "when the user is in a group subscription", ->
  52. beforeEach ->
  53. Subscription.create {
  54. admin_id: ObjectId()
  55. member_ids: [@user._id]
  56. groupAccount: true
  57. planCode: 'collaborator'
  58. customAccount: true
  59. } # returns a promise
  60. it "should set their features to the upgraded set", (done) ->
  61. syncUserAndGetFeatures @user, (error, features) =>
  62. throw error if error?
  63. plan = settings.plans.find (plan) -> plan.planCode == 'collaborator'
  64. expect(features).to.deep.equal(plan.features)
  65. done()
  66. describe "when the user has bonus features", ->
  67. beforeEach ->
  68. User.update {
  69. _id: @user._id
  70. }, {
  71. refered_user_count: 10
  72. } # returns a promise
  73. it "should set their features to the bonus set", (done) ->
  74. syncUserAndGetFeatures @user, (error, features) =>
  75. throw error if error?
  76. expect(features).to.deep.equal(Object.assign(
  77. {}, settings.defaultFeatures, settings.bonus_features[9]
  78. ))
  79. done()
  80. describe "when the user has a v1 plan", ->
  81. beforeEach ->
  82. MockV1Api.setUser 42, plan_name: 'free'
  83. User.update {
  84. _id: @user._id
  85. }, {
  86. overleaf:
  87. id: 42
  88. } # returns a promise
  89. it "should set their features to the v1 plan", (done) ->
  90. syncUserAndGetFeatures @user, (error, features) =>
  91. throw error if error?
  92. plan = settings.plans.find (plan) -> plan.planCode == 'v1_free'
  93. expect(features).to.deep.equal(plan.features)
  94. done()
  95. describe "when the user has a v1 plan and bonus features", ->
  96. beforeEach ->
  97. MockV1Api.setUser 42, plan_name: 'free'
  98. User.update {
  99. _id: @user._id
  100. }, {
  101. overleaf:
  102. id: 42
  103. refered_user_count: 10
  104. } # returns a promise
  105. it "should set their features to the best of the v1 plan and bonus features", (done) ->
  106. syncUserAndGetFeatures @user, (error, features) =>
  107. throw error if error?
  108. v1plan = settings.plans.find (plan) -> plan.planCode == 'v1_free'
  109. expectedFeatures = Object.assign(
  110. {}, v1plan.features, settings.bonus_features[9]
  111. )
  112. expect(features).to.deep.equal(expectedFeatures)
  113. done()
  114. describe "when the user has a group and personal subscription", ->
  115. beforeEach (done) ->
  116. Subscription.create {
  117. admin_id: @user._id
  118. planCode: 'professional'
  119. customAccount: true
  120. }, (error) =>
  121. throw error if error?
  122. Subscription.create {
  123. admin_id: ObjectId()
  124. member_ids: [@user._id]
  125. groupAccount: true
  126. planCode: 'collaborator'
  127. customAccount: true
  128. }, done
  129. return
  130. it "should set their features to the best set", (done) ->
  131. syncUserAndGetFeatures @user, (error, features) =>
  132. throw error if error?
  133. plan = settings.plans.find (plan) -> plan.planCode == 'professional'
  134. expect(features).to.deep.equal(plan.features)
  135. done()