From d2f3907d9ec6b30fc8f3f07d38297f0c3cf8d0e6 Mon Sep 17 00:00:00 2001 From: John Yeo Date: Thu, 5 Mar 2026 19:18:46 +0000 Subject: [PATCH] fix: new billing subscription --- .../actions/attach/setup/setupAttachBillingContext.ts | 4 ++-- .../stripe/setup/fetchStripeSubscriptionForBilling.ts | 10 +++------- .../stripe/setup/setupStripeBillingContext.ts | 7 +++---- .../new-billing-subscription.test.ts | 4 ++-- 4 files changed, 10 insertions(+), 15 deletions(-) diff --git a/server/src/internal/billing/v2/actions/attach/setup/setupAttachBillingContext.ts b/server/src/internal/billing/v2/actions/attach/setup/setupAttachBillingContext.ts index 29b04e0d6..9887c445c 100644 --- a/server/src/internal/billing/v2/actions/attach/setup/setupAttachBillingContext.ts +++ b/server/src/internal/billing/v2/actions/attach/setup/setupAttachBillingContext.ts @@ -117,7 +117,7 @@ export const setupAttachBillingContext = async ({ targetCustomerProduct: currentCustomerProduct, contextOverride, params, - // paramDiscounts: params.discounts, + newBillingSubscription: shouldForceNewSubscription, }); const featureQuantities = setupFeatureQuantitiesContext({ @@ -231,7 +231,7 @@ export const setupAttachBillingContext = async ({ externalId: params.subscription_id, skipBillingChanges: - params.no_billing_changes ?? + params.no_billing_changes === true || params.processor_subscription_id !== undefined, }; }; diff --git a/server/src/internal/billing/v2/providers/stripe/setup/fetchStripeSubscriptionForBilling.ts b/server/src/internal/billing/v2/providers/stripe/setup/fetchStripeSubscriptionForBilling.ts index 20c6bf195..2cddbdbea 100644 --- a/server/src/internal/billing/v2/providers/stripe/setup/fetchStripeSubscriptionForBilling.ts +++ b/server/src/internal/billing/v2/providers/stripe/setup/fetchStripeSubscriptionForBilling.ts @@ -22,20 +22,16 @@ export const fetchStripeSubscriptionForBilling = async ({ product, targetCusProductId, params, - // newBillingSubscription, + newBillingSubscription, }: { ctx: AutumnContext; fullCus: FullCustomer; product?: Product; targetCusProductId?: string; - // newBillingSubscription?: boolean; + newBillingSubscription?: boolean; params?: AttachParamsV1 | MultiAttachParamsV0 | UpdateSubscriptionV1Params; }): Promise => { - if ( - params && - "new_billing_subscription" in params && - params.new_billing_subscription - ) { + if (newBillingSubscription) { return undefined; } diff --git a/server/src/internal/billing/v2/providers/stripe/setup/setupStripeBillingContext.ts b/server/src/internal/billing/v2/providers/stripe/setup/setupStripeBillingContext.ts index 2423bfa6d..c687082c9 100644 --- a/server/src/internal/billing/v2/providers/stripe/setup/setupStripeBillingContext.ts +++ b/server/src/internal/billing/v2/providers/stripe/setup/setupStripeBillingContext.ts @@ -19,18 +19,16 @@ export const setupStripeBillingContext = async ({ product, targetCustomerProduct, contextOverride = {}, - // paramDiscounts, params, - // newBillingSubscription, + newBillingSubscription, }: { ctx: AutumnContext; fullCustomer: FullCustomer; product?: Product; targetCustomerProduct?: FullCusProduct; contextOverride?: BillingContextOverride; - // paramDiscounts?: AttachDiscount[]; params?: AttachParamsV1 | MultiAttachParamsV0 | UpdateSubscriptionV1Params; - // newBillingSubscription?: boolean; + newBillingSubscription?: boolean; }) => { const { stripeBillingContext } = contextOverride; @@ -52,6 +50,7 @@ export const setupStripeBillingContext = async ({ product, targetCusProductId: targetCustomerProduct?.id, params, + newBillingSubscription, }); const stripeSubscriptionSchedule = targetCustomerProduct diff --git a/server/tests/integration/billing/attach/new-billing-subscription/new-billing-subscription.test.ts b/server/tests/integration/billing/attach/new-billing-subscription/new-billing-subscription.test.ts index ee1c5dd05..a9325ed83 100644 --- a/server/tests/integration/billing/attach/new-billing-subscription/new-billing-subscription.test.ts +++ b/server/tests/integration/billing/attach/new-billing-subscription/new-billing-subscription.test.ts @@ -249,7 +249,7 @@ test.concurrent(`${chalk.yellowBright("new-billing-sub 3: entities get separate customer: entity2Final, productId: premium.id, }); -}, 120000); +}); // ============================================================================= // TEST 4: Upgrade ignores new_billing_subscription @@ -451,7 +451,7 @@ test.concurrent(`${chalk.yellowBright("new-billing-sub 6: customer upgrade doesn customer: entityAfter, productId: premium.id, }); -}, 120000); +}); // ============================================================================= // TEST 7: Free -> paid main with existing paid cycle honors new_billing_subscription