mirror of
https://github.com/overleaf/overleaf.git
synced 2025-04-13 11:46:22 +00:00
Merge pull request #3503 from overleaf/cmg-downgrade-group-subscription
Downgrade group subscription properly GitOrigin-RevId: 6d028b79f8d5cc1ae9257e72b12d06190fed4121
This commit is contained in:
parent
682abe9ca5
commit
f7fd2dec65
2 changed files with 105 additions and 5 deletions
|
@ -258,6 +258,34 @@ const SubscriptionUpdater = {
|
|||
subscription.save(err => callback(err, subscription))
|
||||
},
|
||||
|
||||
_deleteAndReplaceSubscriptionFromRecurly(
|
||||
recurlySubscription,
|
||||
subscription,
|
||||
requesterData,
|
||||
callback
|
||||
) {
|
||||
const adminUserId = subscription.admin_id
|
||||
SubscriptionUpdater.deleteSubscription(subscription, requesterData, err => {
|
||||
if (err) {
|
||||
return callback(err)
|
||||
}
|
||||
SubscriptionUpdater._createNewSubscription(
|
||||
adminUserId,
|
||||
(err, newSubscription) => {
|
||||
if (err) {
|
||||
return callback(err)
|
||||
}
|
||||
SubscriptionUpdater._updateSubscriptionFromRecurly(
|
||||
recurlySubscription,
|
||||
newSubscription,
|
||||
requesterData,
|
||||
callback
|
||||
)
|
||||
}
|
||||
)
|
||||
})
|
||||
},
|
||||
|
||||
_updateSubscriptionFromRecurly(
|
||||
recurlySubscription,
|
||||
subscription,
|
||||
|
@ -271,19 +299,31 @@ const SubscriptionUpdater = {
|
|||
callback
|
||||
)
|
||||
}
|
||||
subscription.recurlySubscription_id = recurlySubscription.uuid
|
||||
subscription.planCode = recurlySubscription.plan.plan_code
|
||||
const plan = PlansLocator.findLocalPlanInSettings(subscription.planCode)
|
||||
const updatedPlanCode = recurlySubscription.plan.plan_code
|
||||
const plan = PlansLocator.findLocalPlanInSettings(updatedPlanCode)
|
||||
|
||||
if (plan == null) {
|
||||
return callback(
|
||||
new Error(`plan code not found: ${subscription.planCode}`)
|
||||
return callback(new Error(`plan code not found: ${updatedPlanCode}`))
|
||||
}
|
||||
if (!plan.groupPlan && subscription.groupPlan) {
|
||||
// If downgrading from group to individual plan, delete group sub and create a new one
|
||||
return SubscriptionUpdater._deleteAndReplaceSubscriptionFromRecurly(
|
||||
recurlySubscription,
|
||||
subscription,
|
||||
requesterData,
|
||||
callback
|
||||
)
|
||||
}
|
||||
|
||||
subscription.recurlySubscription_id = recurlySubscription.uuid
|
||||
subscription.planCode = updatedPlanCode
|
||||
|
||||
if (plan.groupPlan) {
|
||||
if (!subscription.groupPlan) {
|
||||
subscription.member_ids = subscription.member_ids || []
|
||||
subscription.member_ids.push(subscription.admin_id)
|
||||
}
|
||||
|
||||
subscription.groupPlan = true
|
||||
subscription.membersLimit = plan.membersLimit
|
||||
|
||||
|
|
|
@ -32,6 +32,7 @@ describe('SubscriptionUpdater', function () {
|
|||
manager_ids: [this.adminUser._id],
|
||||
member_ids: this.allUserIds,
|
||||
save: sinon.stub().callsArgWith(0),
|
||||
groupPlan: true,
|
||||
planCode: 'group_subscription',
|
||||
}
|
||||
|
||||
|
@ -324,6 +325,29 @@ describe('SubscriptionUpdater', function () {
|
|||
)
|
||||
})
|
||||
|
||||
it('should delete and replace subscription when downgrading from group to individual plan', function (done) {
|
||||
this.PlansLocator.findLocalPlanInSettings
|
||||
.withArgs(this.recurlySubscription.plan.plan_code)
|
||||
.returns({ groupPlan: false })
|
||||
this.SubscriptionUpdater._deleteAndReplaceSubscriptionFromRecurly = sinon
|
||||
.stub()
|
||||
.yields()
|
||||
this.SubscriptionUpdater._updateSubscriptionFromRecurly(
|
||||
this.recurlySubscription,
|
||||
this.groupSubscription,
|
||||
{},
|
||||
err => {
|
||||
if (err != null) {
|
||||
return done(err)
|
||||
}
|
||||
this.SubscriptionUpdater._deleteAndReplaceSubscriptionFromRecurly
|
||||
.calledWithMatch(this.recurlySubscription, this.groupSubscription)
|
||||
.should.equal(true)
|
||||
done()
|
||||
}
|
||||
)
|
||||
})
|
||||
|
||||
it('should not set group to true or set groupPlan', function (done) {
|
||||
this.SubscriptionUpdater._updateSubscriptionFromRecurly(
|
||||
this.recurlySubscription,
|
||||
|
@ -559,4 +583,40 @@ describe('SubscriptionUpdater', function () {
|
|||
}
|
||||
})
|
||||
})
|
||||
|
||||
describe('_deleteAndReplaceSubscriptionFromRecurly', function () {
|
||||
beforeEach(function (done) {
|
||||
this.SubscriptionUpdater.deleteSubscription = sinon.stub().yields()
|
||||
this.SubscriptionUpdater._createNewSubscription = sinon
|
||||
.stub()
|
||||
.yields(null, this.subscription)
|
||||
this.SubscriptionUpdater._updateSubscriptionFromRecurly = sinon
|
||||
.stub()
|
||||
.yields()
|
||||
this.SubscriptionUpdater._deleteAndReplaceSubscriptionFromRecurly(
|
||||
this.recurlySubscription,
|
||||
this.groupSubscription,
|
||||
{},
|
||||
done
|
||||
)
|
||||
})
|
||||
|
||||
it('should delete the old subscription', function () {
|
||||
this.SubscriptionUpdater.deleteSubscription
|
||||
.calledWithMatch(this.groupSubscription)
|
||||
.should.equal(true)
|
||||
})
|
||||
|
||||
it('should create a new subscription', function () {
|
||||
this.SubscriptionUpdater._createNewSubscription
|
||||
.calledWith(this.groupSubscription.admin_id)
|
||||
.should.equal(true)
|
||||
})
|
||||
|
||||
it('should update the new subscription', function () {
|
||||
this.SubscriptionUpdater._updateSubscriptionFromRecurly
|
||||
.calledWithMatch(this.recurlySubscription, this.subscription)
|
||||
.should.equal(true)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
Loading…
Add table
Reference in a new issue