Merge pull request #464 from sharelatex/ja-validate-recurly-subscription-on-creation

Check Recurly for subscription as well before creating subscription
This commit is contained in:
James Allen
2017-03-28 13:15:58 +01:00
committed by GitHub
5 changed files with 137 additions and 62 deletions
@@ -17,8 +17,7 @@ mockSubscriptions =
account:
account_code: "user-123"
describe "SubscriptionController sanboxed", ->
describe "SubscriptionController", ->
beforeEach ->
@user = {email:"tom@yahoo.com", _id: 'one', signUpDate: new Date('2000-10-01')}
@activeRecurlySubscription = mockSubscriptions["subscription-123-active"]
@@ -150,6 +149,7 @@ describe "SubscriptionController sanboxed", ->
describe "paymentPage", ->
beforeEach ->
@req.headers = {}
@SubscriptionHandler.validateNoSubscriptionInRecurly = sinon.stub().yields(null, true)
@GeoIpLookup.getCurrencyCode.callsArgWith(1, null, @stubbedCurrencyCode)
describe "with a user without a subscription", ->
@@ -209,6 +209,16 @@ describe "SubscriptionController sanboxed", ->
opts.currency.should.equal @stubbedCurrencyCode
done()
@SubscriptionController.paymentPage @req, @res
describe "with a recurly subscription already", ->
it "should redirect to the subscription dashboard", (done)->
@LimitationsManager.userHasSubscription.callsArgWith(1, null, false)
@SubscriptionHandler.validateNoSubscriptionInRecurly = sinon.stub().yields(null, false)
@res.redirect = (url)=>
url.should.equal "/user/subscription"
done()
@SubscriptionController.paymentPage(@req, @res)
describe "successful_subscription", ->
beforeEach (done) ->
@@ -16,7 +16,7 @@ mockRecurlySubscriptions =
account:
account_code: "user-123"
describe "Subscription Handler sanboxed", ->
describe "SubscriptionHandler", ->
beforeEach ->
@Settings =
@@ -33,7 +33,7 @@ describe "Subscription Handler sanboxed", ->
@activeRecurlySubscription = mockRecurlySubscriptions["subscription-123-active"]
@User = {}
@user =
_id: "user_id_here_"
_id: @user_id = "user_id_here_"
@subscription =
recurlySubscription_id: @activeRecurlySubscription.uuid
@RecurlyWrapper =
@@ -77,23 +77,33 @@ describe "Subscription Handler sanboxed", ->
describe "createSubscription", ->
beforeEach (done) ->
beforeEach ->
@callback = sinon.stub()
@subscriptionDetails =
cvv:"123"
number:"12345"
@recurly_token_id = "45555666"
@SubscriptionHandler.createSubscription(@user, @subscriptionDetails, @recurly_token_id, done)
@SubscriptionHandler.validateNoSubscriptionInRecurly = sinon.stub().yields(null, true)
it "should create the subscription with the wrapper", (done)->
@RecurlyWrapper.createSubscription.calledWith(@user, @subscriptionDetails, @recurly_token_id).should.equal true
done()
describe "successfully", ->
beforeEach ->
@SubscriptionHandler.createSubscription(@user, @subscriptionDetails, @recurly_token_id, @callback)
it "should sync the subscription to the user", (done)->
@SubscriptionUpdater.syncSubscription.calledOnce.should.equal true
@SubscriptionUpdater.syncSubscription.args[0][0].should.deep.equal @activeRecurlySubscription
@SubscriptionUpdater.syncSubscription.args[0][1].should.deep.equal @user._id
done()
it "should create the subscription with the wrapper", ->
@RecurlyWrapper.createSubscription.calledWith(@user, @subscriptionDetails, @recurly_token_id).should.equal true
it "should sync the subscription to the user", ->
@SubscriptionUpdater.syncSubscription.calledOnce.should.equal true
@SubscriptionUpdater.syncSubscription.args[0][0].should.deep.equal @activeRecurlySubscription
@SubscriptionUpdater.syncSubscription.args[0][1].should.deep.equal @user._id
describe "when there is already a subscription in Recurly", ->
beforeEach ->
@SubscriptionHandler.validateNoSubscriptionInRecurly = sinon.stub().yields(null, false)
@SubscriptionHandler.createSubscription(@user, @subscriptionDetails, @recurly_token_id, @callback)
it "should return an error", ->
@callback.calledWith(new Error("user already has subscription in recurly"))
describe "updateSubscription", ->
describe "with a user with a subscription", ->
@@ -145,8 +155,6 @@ describe "Subscription Handler sanboxed", ->
updateOptions = @RecurlyWrapper.updateSubscription.args[0][1]
updateOptions.plan_code.should.equal @plan_code
describe "cancelSubscription", ->
describe "with a user without a subscription", ->
beforeEach (done) ->
@@ -210,5 +218,39 @@ describe "Subscription Handler sanboxed", ->
@SubscriptionUpdater.syncSubscription.args[0][0].should.deep.equal @activeRecurlySubscription
@SubscriptionUpdater.syncSubscription.args[0][1].should.deep.equal @user._id
describe "validateNoSubscriptionInRecurly", ->
beforeEach ->
@subscriptions = []
@RecurlyWrapper.listAccountActiveSubscriptions = sinon.stub().yields(null, @subscriptions)
@SubscriptionUpdater.syncSubscription = sinon.stub().yields()
@callback = sinon.stub()
describe "with no subscription in recurly", ->
beforeEach ->
@subscriptions.push @subscription = { "mock": "subscription" }
@SubscriptionHandler.validateNoSubscriptionInRecurly @user_id, @callback
it "should call RecurlyWrapper.listAccountActiveSubscriptions with the user id", ->
@RecurlyWrapper.listAccountActiveSubscriptions
.calledWith(@user_id)
.should.equal true
it "should sync the subscription", ->
@SubscriptionUpdater.syncSubscription
.calledWith(@subscription, @user_id)
.should.equal true
it "should call the callback with valid == false", ->
@callback.calledWith(null, false).should.equal true
describe "with a subscription in recurly", ->
beforeEach ->
@SubscriptionHandler.validateNoSubscriptionInRecurly @user_id, @callback
it "should not sync the subscription", ->
@SubscriptionUpdater.syncSubscription
.called
.should.equal false
it "should call the callback with valid == true", ->
@callback.calledWith(null, true).should.equal true