Pārlūkot izejas kodu

Merge pull request #23161 from overleaf/rh-pause-no-plan-change

Prevent downgrade to personal plan during subscription pause

GitOrigin-RevId: e3ba2e8e4d9b909fa2ee9c3c7e15db2ed257e43b
roo hutton 1 gadu atpakaļ
vecāks
revīzija
50f5a4e909

+ 3 - 1
services/web/frontend/js/features/subscription/components/dashboard/states/active/cancel-plan/cancel-subscription.tsx

@@ -164,7 +164,9 @@ export function CancelSubscription() {
   const showDowngrade = showDowngradeOption(
   const showDowngrade = showDowngradeOption(
     personalSubscription.plan.planCode,
     personalSubscription.plan.planCode,
     personalSubscription.plan.groupPlan,
     personalSubscription.plan.groupPlan,
-    personalSubscription.recurly.trial_ends_at
+    personalSubscription.recurly.trial_ends_at,
+    personalSubscription.recurly.pausedAt,
+    personalSubscription.recurly.remainingPauseCycles
   )
   )
   const planToDowngradeTo = plans.find(
   const planToDowngradeTo = plans.find(
     plan => plan.planCode === planCodeToDowngradeTo
     plan => plan.planCode === planCodeToDowngradeTo

+ 6 - 1
services/web/frontend/js/features/subscription/util/show-downgrade-option.ts

@@ -1,12 +1,17 @@
+import { Nullable } from '../../../../../types/utils'
 import isInFreeTrial from './is-in-free-trial'
 import isInFreeTrial from './is-in-free-trial'
 import isMonthlyCollaboratorPlan from './is-monthly-collaborator-plan'
 import isMonthlyCollaboratorPlan from './is-monthly-collaborator-plan'
 
 
 export default function showDowngradeOption(
 export default function showDowngradeOption(
   planCode: string,
   planCode: string,
   isGroupPlan?: boolean,
   isGroupPlan?: boolean,
-  trialEndsAt?: string | null
+  trialEndsAt?: string | null,
+  pausedAt?: Nullable<string>,
+  remainingPauseCycles?: Nullable<number>
 ) {
 ) {
   return (
   return (
+    !pausedAt &&
+    !remainingPauseCycles &&
     isMonthlyCollaboratorPlan(planCode, isGroupPlan) &&
     isMonthlyCollaboratorPlan(planCode, isGroupPlan) &&
     !isInFreeTrial(trialEndsAt)
     !isInFreeTrial(trialEndsAt)
   )
   )

+ 21 - 0
services/web/test/frontend/features/subscription/util/show-downgrade-option.test.ts

@@ -44,4 +44,25 @@ describe('showDowngradeOption', function () {
       showDowngradeOption('collaborator', false, '2000-02-16T17:59:07.000Z')
       showDowngradeOption('collaborator', false, '2000-02-16T17:59:07.000Z')
     ).to.be.true
     ).to.be.true
   })
   })
+  it('returns false when on a monthly collaborator plan with a pending pause', function () {
+    expect(
+      showDowngradeOption(
+        'collaborator',
+        false,
+        null,
+        '2030-01-01T12:00:00.000Z'
+      )
+    ).to.be.false
+  })
+  it('returns false when on a monthly collaborator plan with an active pause', function () {
+    expect(
+      showDowngradeOption(
+        'collaborator',
+        false,
+        null,
+        '2030-01-01T12:00:00.000Z',
+        5
+      )
+    ).to.be.false
+  })
 })
 })