diff --git a/lib/recurly/risk/three-d-secure/strategy/stripe.js b/lib/recurly/risk/three-d-secure/strategy/stripe.js index 9cfe639c..06692f87 100644 --- a/lib/recurly/risk/three-d-secure/strategy/stripe.js +++ b/lib/recurly/risk/three-d-secure/strategy/stripe.js @@ -40,15 +40,20 @@ export default class StripeStrategy extends ThreeDSecureStrategy { this.whenReady(() => { const isPaymentIntent = this.stripeClientSecret.indexOf('pi') === 0; - const handleAction = isPaymentIntent ? this.stripe.handleCardAction : this.stripe.confirmCardSetup; - handleAction(this.stripeClientSecret).then(result => { - if (result.error) { - throw result.error; - } - const { id } = result.paymentIntent || result.setupIntent; - this.emit('done', { id }); - }).catch(err => this.threeDSecure.error('3ds-auth-error', { cause: err })); + (() => ( + isPaymentIntent + ? this.stripe.handleNextAction({ clientSecret: this.stripeClientSecret }) + : this.stripe.confirmCardSetup(this.stripeClientSecret) + ))() + .then(result => { + if (result.error) { + throw result.error; + } + const { id } = result.paymentIntent || result.setupIntent; + this.emit('done', { id }); + }) + .catch(err => this.threeDSecure.error('3ds-auth-error', { cause: err })); }); } diff --git a/test/unit/risk/three-d-secure/strategy/stripe.test.js b/test/unit/risk/three-d-secure/strategy/stripe.test.js index a8b93058..44fc3113 100644 --- a/test/unit/risk/three-d-secure/strategy/stripe.test.js +++ b/test/unit/risk/three-d-secure/strategy/stripe.test.js @@ -25,7 +25,7 @@ describe('StripeStrategy', function () { setupIntent: { id: 'seti-test-id', test: 'result', consistingOf: 'arbitrary-values' } }; this.stripe = { - handleCardAction: sinon.stub().resolves(this.paymentIntentResult), + handleNextAction: sinon.stub().resolves(this.paymentIntentResult), confirmCardSetup: sinon.stub().resolves(this.setupIntentResult) }; window.Stripe = sinon.spy(publishableKey => this.stripe); @@ -78,8 +78,8 @@ describe('StripeStrategy', function () { it('instructs Stripe.js to handle the card action using the client secret', function () { const { strategy, target, stripe } = this; strategy.attach(target); - assert(stripe.handleCardAction.calledOnce); - assert(stripe.handleCardAction.calledWithExactly('pi-test-stripe-client-secret')); + assert(stripe.handleNextAction.calledOnce); + assert(stripe.handleNextAction.calledWithExactly({ clientSecret: 'pi-test-stripe-client-secret' })); }); it('emits done with the paymentIntent result', function (done) { @@ -95,7 +95,7 @@ describe('StripeStrategy', function () { beforeEach(function () { const { strategy } = this; this.exampleResult = { error: { example: 'error', for: 'testing' } }; - strategy.stripe.handleCardAction = sinon.stub().resolves(this.exampleResult); + strategy.stripe.handleNextAction = sinon.stub().resolves(this.exampleResult); }); it('emits an error on threeDSecure', function (done) {