mirror of
https://github.com/overleaf/overleaf.git
synced 2025-04-08 19:50:47 +00:00
if user is member of group on downgrade use the group subscription
This commit is contained in:
parent
a89edde139
commit
a6859e22b3
3 changed files with 55 additions and 4 deletions
|
@ -22,4 +22,7 @@ module.exports =
|
|||
Subscription.findOne _id:subscription_id, callback
|
||||
|
||||
getSubscriptionByMemberIdAndId: (user_id, subscription_id, callback)->
|
||||
Subscription.findOne member_ids: user_id, _id:subscription_id, {_id:1}, callback
|
||||
Subscription.findOne {member_ids: user_id, _id:subscription_id}, {_id:1}, callback
|
||||
|
||||
getGroupSubscriptionMemberOf: (user_id, callback)->
|
||||
Subscription.findOne {member_ids: user_id}, {_id:1}, callback
|
|
@ -16,10 +16,24 @@ module.exports =
|
|||
syncSubscription: (recurlySubscription, adminUser_id, callback) ->
|
||||
self = @
|
||||
logger.log adminUser_id:adminUser_id, recurlySubscription:recurlySubscription, "syncSubscription, creating new if subscription does not exist"
|
||||
SubscriptionLocator.getUsersSubscription adminUser_id, (err, subscription)->
|
||||
jobs =
|
||||
subscription: (cb)->
|
||||
SubscriptionLocator.getUsersSubscription adminUser_id, cb
|
||||
groupSubscription: (cb)->
|
||||
SubscriptionLocator.getGroupSubscriptionMemberOf adminUser_id, cb
|
||||
async.series jobs, (err, results)->
|
||||
{subscription, groupSubscription} = results
|
||||
if subscription?
|
||||
logger.log adminUser_id:adminUser_id, recurlySubscription:recurlySubscription, "subscription does exist"
|
||||
self._updateSubscription recurlySubscription, subscription, callback
|
||||
self._updateSubscription recurlySubscription, subscription, (err)->
|
||||
if err?
|
||||
logger.err err:err, adminUser_id:adminUser_id, "error syncing subscription"
|
||||
return callback(err)
|
||||
if groupSubscription? and recurlySubscription.state == "expired"
|
||||
logger.log adminUser_id:adminUser_id, "subscription does exist"
|
||||
UserFeaturesUpdater.updateFeatures adminUser_id, groupSubscription.planCode, callback
|
||||
else
|
||||
callback()
|
||||
else
|
||||
logger.log adminUser_id:adminUser_id, recurlySubscription:recurlySubscription, "subscription does not exist, creating a new one"
|
||||
self._createNewSubscription adminUser_id, (err, subscription)->
|
||||
|
|
|
@ -23,6 +23,14 @@ describe "Subscription Updater", ->
|
|||
freeTrial:{}
|
||||
plan_code:"student_or_something"
|
||||
|
||||
@groupSubscription =
|
||||
admin_id: @adminUser._id
|
||||
members_id: @allUserIds
|
||||
save: sinon.stub().callsArgWith(0)
|
||||
freeTrial:{}
|
||||
plan_code:"group_subscription"
|
||||
|
||||
|
||||
@updateStub = sinon.stub().callsArgWith(2, null)
|
||||
@findAndModifyStub = sinon.stub().callsArgWith(2, null, @subscription)
|
||||
@SubscriptionModel = class
|
||||
|
@ -34,6 +42,7 @@ describe "Subscription Updater", ->
|
|||
|
||||
@SubscriptionLocator =
|
||||
getUsersSubscription: sinon.stub()
|
||||
getGroupSubscriptionMemberOf:sinon.stub()
|
||||
|
||||
@Settings =
|
||||
freeTrialPlanCode: "collaborator"
|
||||
|
@ -58,16 +67,41 @@ describe "Subscription Updater", ->
|
|||
|
||||
|
||||
describe "syncSubscription", ->
|
||||
it "should update the subscription if the user already is admin of one", (done)->
|
||||
|
||||
beforeEach ->
|
||||
|
||||
@SubscriptionLocator.getUsersSubscription.callsArgWith(1, null, @subscription)
|
||||
@SubscriptionLocator.getGroupSubscriptionMemberOf.callsArgWith(1, null, @groupSubscription)
|
||||
@SubscriptionUpdater._updateSubscription = sinon.stub().callsArgWith(2)
|
||||
|
||||
it "should update the subscription if the user already is admin of one", (done)->
|
||||
@SubscriptionUpdater._createNewSubscription = sinon.stub()
|
||||
|
||||
@SubscriptionUpdater.syncSubscription @recurlySubscription, @adminUser._id, (err)=>
|
||||
@SubscriptionLocator.getUsersSubscription.calledWith(@adminUser._id).should.equal true
|
||||
@SubscriptionUpdater._updateSubscription.called.should.equal true
|
||||
@SubscriptionUpdater._updateSubscription.calledWith(@recurlySubscription, @subscription).should.equal true
|
||||
done()
|
||||
|
||||
it "should sync with the group subscription if the recurly subscription is expired", (done)->
|
||||
@recurlySubscription.state = "expired"
|
||||
|
||||
@SubscriptionUpdater.syncSubscription @recurlySubscription, @adminUser._id, (err)=>
|
||||
@SubscriptionLocator.getUsersSubscription.calledWith(@adminUser._id).should.equal true
|
||||
@SubscriptionUpdater._updateSubscription.called.should.equal true
|
||||
@SubscriptionUpdater._updateSubscription.calledWith(@recurlySubscription, @subscription).should.equal true
|
||||
@UserFeaturesUpdater.updateFeatures.calledWith(@adminUser._id, @groupSubscription.planCode).should.equal true
|
||||
done()
|
||||
|
||||
it "should not call updateFeatures with group subscription if recurly subscription is not expired", (done)->
|
||||
|
||||
@SubscriptionUpdater.syncSubscription @recurlySubscription, @adminUser._id, (err)=>
|
||||
@SubscriptionLocator.getUsersSubscription.calledWith(@adminUser._id).should.equal true
|
||||
@SubscriptionUpdater._updateSubscription.called.should.equal true
|
||||
@SubscriptionUpdater._updateSubscription.calledWith(@recurlySubscription, @subscription).should.equal true
|
||||
@UserFeaturesUpdater.updateFeatures.called.should.equal false
|
||||
done()
|
||||
|
||||
|
||||
describe "_updateSubscription", ->
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue