diff --git a/services/web/app/src/Features/Subscription/SubscriptionGroupController.mjs b/services/web/app/src/Features/Subscription/SubscriptionGroupController.mjs index 7091d2916d..0c6070fe12 100644 --- a/services/web/app/src/Features/Subscription/SubscriptionGroupController.mjs +++ b/services/web/app/src/Features/Subscription/SubscriptionGroupController.mjs @@ -303,7 +303,6 @@ async function submitForm(req, res) { if (paymentProviderSubscription.isCollectionMethodManual) { await SubscriptionGroupHandler.promises.updateSubscriptionPaymentTerms( - userId, paymentProviderSubscription, poNumber ) diff --git a/services/web/app/src/Features/Subscription/SubscriptionGroupHandler.js b/services/web/app/src/Features/Subscription/SubscriptionGroupHandler.js index 977218fdd2..d5d94a89a7 100644 --- a/services/web/app/src/Features/Subscription/SubscriptionGroupHandler.js +++ b/services/web/app/src/Features/Subscription/SubscriptionGroupHandler.js @@ -7,7 +7,6 @@ const SubscriptionController = require('./SubscriptionController') const SubscriptionHelper = require('./SubscriptionHelper') const { Subscription } = require('../../models/Subscription') const { User } = require('../../models/User') -const RecurlyClient = require('./RecurlyClient') const PlansLocator = require('./PlansLocator') const TeamInvitesHandler = require('./TeamInvitesHandler') const GroupPlansData = require('./GroupPlansData') @@ -284,13 +283,18 @@ async function createAddSeatsSubscriptionChange(userId, adding, poNumber) { const { changeRequest, paymentProviderSubscription } = await _addSeatsSubscriptionChange(userId, adding) + let subscriptionDetailUpdateRequest if (paymentProviderSubscription.isCollectionMethodManual) { - await updateSubscriptionPaymentTerms(paymentProviderSubscription, poNumber) + subscriptionDetailUpdateRequest = await updateSubscriptionPaymentTerms( + paymentProviderSubscription, + poNumber + ) } await Modules.promises.hooks.fire( 'applySubscriptionChangeRequestAndSync', changeRequest, - userId + userId, + subscriptionDetailUpdateRequest?.termsAndConditions ) return { adding } @@ -300,22 +304,12 @@ async function updateSubscriptionPaymentTerms( paymentProviderSubscription, poNumber ) { - if (paymentProviderSubscription.service?.includes('stripe')) { - // TODO: Implement Stripe payment terms update - throw new OError( - 'Updating payment terms is not supported for Stripe subscriptions', - { - subscriptionId: paymentProviderSubscription.id, - } - ) - } - const [termsAndConditions] = await Modules.promises.hooks.fire( 'generateTermsAndConditions', { currency: paymentProviderSubscription.currency, poNumber } ) - const updateRequest = poNumber + const subscriptionDetailUpdateRequest = poNumber ? paymentProviderSubscription.getRequestForPoNumberAndTermsAndConditionsUpdate( poNumber, termsAndConditions @@ -323,8 +317,11 @@ async function updateSubscriptionPaymentTerms( : paymentProviderSubscription.getRequestForTermsAndConditionsUpdate( termsAndConditions ) - - await RecurlyClient.promises.updateSubscriptionDetails(updateRequest) + await Modules.promises.hooks.fire( + 'updateSubscriptionDetails', + subscriptionDetailUpdateRequest + ) + return subscriptionDetailUpdateRequest } async function getGroupPlanUpgradePreview(ownerId) { diff --git a/services/web/test/unit/src/Subscription/SubscriptionGroupHandlerTests.js b/services/web/test/unit/src/Subscription/SubscriptionGroupHandlerTests.js index 87793fe440..fa82a03f08 100644 --- a/services/web/test/unit/src/Subscription/SubscriptionGroupHandlerTests.js +++ b/services/web/test/unit/src/Subscription/SubscriptionGroupHandlerTests.js @@ -498,9 +498,9 @@ describe('SubscriptionGroupHandler', function () { this.adding, '123' ) - - this.RecurlyClient.promises.updateSubscriptionDetails + this.Modules.promises.hooks.fire .calledWith( + 'updateSubscriptionDetails', sinon.match .has('poNumber') .and(sinon.match.has('termsAndConditions')) @@ -532,21 +532,12 @@ describe('SubscriptionGroupHandler', function () { 'T&Cs' ) .should.equal(true) - this.RecurlyClient.promises.updateSubscriptionDetails - .calledWith(this.poNumberAndTermsAndConditionsUpdate) - .should.equal(true) - }) - - it('should fail for stripe', async function () { - this.recurlySubscription.service = 'stripe' - await expect( - this.Handler.promises.updateSubscriptionPaymentTerms( - this.recurlySubscription, - this.poNumberAndTermsAndConditionsUpdate.poNumber + this.Modules.promises.hooks.fire + .calledWith( + 'updateSubscriptionDetails', + this.poNumberAndTermsAndConditionsUpdate ) - ).to.be.rejectedWith( - 'Updating payment terms is not supported for Stripe subscriptions' - ) + .should.equal(true) }) }) @@ -558,8 +549,11 @@ describe('SubscriptionGroupHandler', function () { this.recurlySubscription.getRequestForTermsAndConditionsUpdate .calledWithMatch('T&Cs') .should.equal(true) - this.RecurlyClient.promises.updateSubscriptionDetails - .calledWith(this.termsAndConditionsUpdate) + this.Modules.promises.hooks.fire + .calledWith( + 'updateSubscriptionDetails', + this.termsAndConditionsUpdate + ) .should.equal(true) }) }) diff --git a/services/web/types/stripe/webhook-event.ts b/services/web/types/stripe/webhook-event.ts index f0a08284ed..219be7a1d7 100644 --- a/services/web/types/stripe/webhook-event.ts +++ b/services/web/types/stripe/webhook-event.ts @@ -23,6 +23,7 @@ export type CustomerSubscriptionUpdatedWebhookEvent = { ] } status?: Stripe.Subscription.Status + metadata?: Record } } }