From 5c9f588890e648f0ea544a841e95c93399d5cbe5 Mon Sep 17 00:00:00 2001 From: RulaKhaled Date: Fri, 13 Dec 2024 23:39:09 +0200 Subject: [PATCH 01/11] replace account details plan occurences --- .../Activation/Activation.jsx | 2 +- .../Activation/Activation.test.jsx | 2 +- .../MembersList/MembersList.test.jsx | 1 + .../MembersTable/MembersTable.test.jsx | 16 +-- .../subRoutes/DowngradePlan/DowngradePlan.jsx | 1 + .../DowngradePlan/DowngradePlan.test.jsx | 27 +++- .../ActionsBilling/ActionsBilling.test.jsx | 18 +++ .../ProPlanDetails/ProPlanDetails.jsx | 21 ++- .../SentryPlanDetails/SentryPlanDetails.jsx | 22 ++-- .../TeamPlanDetails/TeamPlanDetails.jsx | 21 ++- .../UpgradeForm/UpdateBlurb/UpdateBlurb.tsx | 10 +- .../UpdateButton/UpdateButton.test.tsx | 12 +- .../UpgradeForm/UpgradeForm.test.tsx | 121 +++++++++++++----- .../UpgradeForm/UpgradeForm.tsx | 6 +- .../UpgradePlanPage/UpgradePlanPage.jsx | 11 +- .../UpgradePlanPage/UpgradePlanPage.test.jsx | 1 + src/shared/utils/upgradeForm.test.ts | 38 +++++- src/shared/utils/upgradeForm.ts | 36 +++--- 18 files changed, 242 insertions(+), 124 deletions(-) diff --git a/src/pages/MembersPage/MembersActivation/Activation/Activation.jsx b/src/pages/MembersPage/MembersActivation/Activation/Activation.jsx index c3eb8a6798..28ef285dc6 100644 --- a/src/pages/MembersPage/MembersActivation/Activation/Activation.jsx +++ b/src/pages/MembersPage/MembersActivation/Activation/Activation.jsx @@ -16,7 +16,7 @@ function Activation() { }) const activatedUserCount = accountDetails?.activatedUserCount || 0 - const planQuantity = accountDetails?.plan?.quantity || 0 + const planQuantity = planData?.plan?.planUserCount || 0 if ( isTrialPlan(planData?.plan?.value) && diff --git a/src/pages/MembersPage/MembersActivation/Activation/Activation.test.jsx b/src/pages/MembersPage/MembersActivation/Activation/Activation.test.jsx index dc03860071..02079f3931 100644 --- a/src/pages/MembersPage/MembersActivation/Activation/Activation.test.jsx +++ b/src/pages/MembersPage/MembersActivation/Activation/Activation.test.jsx @@ -39,7 +39,7 @@ const mockPlanData = { trialEndDate: '', trialTotalDays: 0, pretrialUsersCount: 0, - planUserCount: 1, + planUserCount: 9, hasSeatsLeft: true, } diff --git a/src/pages/MembersPage/MembersList/MembersList.test.jsx b/src/pages/MembersPage/MembersList/MembersList.test.jsx index edc6884330..d9473062e8 100644 --- a/src/pages/MembersPage/MembersList/MembersList.test.jsx +++ b/src/pages/MembersPage/MembersList/MembersList.test.jsx @@ -80,6 +80,7 @@ afterAll(() => { server.close() }) + describe('MembersList', () => { let testLocation diff --git a/src/pages/MembersPage/MembersList/MembersTable/MembersTable.test.jsx b/src/pages/MembersPage/MembersList/MembersTable/MembersTable.test.jsx index c7d8a6e0b9..bfb8239927 100644 --- a/src/pages/MembersPage/MembersList/MembersTable/MembersTable.test.jsx +++ b/src/pages/MembersPage/MembersList/MembersTable/MembersTable.test.jsx @@ -106,7 +106,7 @@ const mockPlanData = { const server = setupServer() beforeAll(() => server.listen()) -beforeEach(() => {}) +beforeEach(() => { }) afterEach(() => { queryClient.clear() server.resetHandlers() @@ -118,13 +118,13 @@ describe('MembersTable', () => { const wrapper = (initialEntries = ['/gh/codecov']) => - ({ children }) => ( - - - {children} - - - ) + ({ children }) => ( + + + {children} + + + ) function setup({ mockUserRequest = mockBaseUserRequest(false), diff --git a/src/pages/PlanPage/subRoutes/CancelPlanPage/subRoutes/DowngradePlan/DowngradePlan.jsx b/src/pages/PlanPage/subRoutes/CancelPlanPage/subRoutes/DowngradePlan/DowngradePlan.jsx index 803ea0e442..3ef0358b28 100644 --- a/src/pages/PlanPage/subRoutes/CancelPlanPage/subRoutes/DowngradePlan/DowngradePlan.jsx +++ b/src/pages/PlanPage/subRoutes/CancelPlanPage/subRoutes/DowngradePlan/DowngradePlan.jsx @@ -70,6 +70,7 @@ function DowngradePlan() { { return HttpResponse.json(mockAccountDetails) }), graphql.query('GetPlanData', () => { - return HttpResponse.json({ - data: { plan: { isFreePlan: true } }, - }) + return HttpResponse.json(mockPlanData) }) ) } diff --git a/src/pages/PlanPage/subRoutes/CurrentOrgPlan/CurrentPlanCard/shared/ActionsBilling/ActionsBilling.test.jsx b/src/pages/PlanPage/subRoutes/CurrentOrgPlan/CurrentPlanCard/shared/ActionsBilling/ActionsBilling.test.jsx index a28e4c6339..38e1199487 100644 --- a/src/pages/PlanPage/subRoutes/CurrentOrgPlan/CurrentPlanCard/shared/ActionsBilling/ActionsBilling.test.jsx +++ b/src/pages/PlanPage/subRoutes/CurrentOrgPlan/CurrentPlanCard/shared/ActionsBilling/ActionsBilling.test.jsx @@ -254,6 +254,7 @@ describe('Actions Billing', () => { plan: { ...mockTrialData.plan, trialStatus: TrialStatuses.NOT_STARTED, + value: Plans.USERS_BASIC, }, }, hasPrivateRepos: true, @@ -275,6 +276,7 @@ describe('Actions Billing', () => { plan: { ...mockTrialData.plan, trialStatus: TrialStatuses.NOT_STARTED, + value: Plans.USERS_BASIC, }, }, hasPrivateRepos: true, @@ -334,6 +336,7 @@ describe('Actions Billing', () => { plan: { ...mockTrialData.plan, trialStatus: TrialStatuses.NOT_STARTED, + value: Plans.USERS_BASIC, }, }, hasPrivateRepos: false, @@ -355,6 +358,7 @@ describe('Actions Billing', () => { plan: { ...mockTrialData.plan, trialStatus: TrialStatuses.NOT_STARTED, + value: Plans.USERS_BASIC, }, }, hasPrivateRepos: false, @@ -382,6 +386,7 @@ describe('Actions Billing', () => { plan: { ...mockTrialData.plan, trialStatus: TrialStatuses.ONGOING, + value: Plans.USERS_TRIAL, }, }, hasPrivateRepos: true, @@ -404,6 +409,12 @@ describe('Actions Billing', () => { it('renders manage plan link', async () => { setup({ accountDetails: mockedProAccountDetails, + trialPlanData: { + plan: { + ...mockTrialData.plan, + value: Plans.USERS_PR_INAPPM, + }, + }, }) render(, { wrapper }) @@ -595,6 +606,7 @@ describe('Actions Billing', () => { plan: { ...mockTrialData.plan, trialStatus: TrialStatuses.ONGOING, + value: Plans.USERS_TRIAL, }, }, }) @@ -618,6 +630,12 @@ describe('Actions Billing', () => { setup({ accountDetails: sentryMockedAccountDetails, plans: sentryPlans, + trialPlanData: { + plan: { + ...mockTrialData.plan, + value: Plans.USERS_SENTRYM, + }, + }, }) render(, { wrapper }) diff --git a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/ProPlanDetails/ProPlanDetails.jsx b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/ProPlanDetails/ProPlanDetails.jsx index 5942e797eb..808e66e5d5 100644 --- a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/ProPlanDetails/ProPlanDetails.jsx +++ b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/ProPlanDetails/ProPlanDetails.jsx @@ -19,7 +19,6 @@ function ProPlanDetails() { const { data: plans } = useAvailablePlans({ provider, owner }) const { proPlanMonth, proPlanYear } = findProPlans({ plans }) - const plan = accountDetails?.rootOrganization?.plan ?? accountDetails?.plan const scheduledPhase = accountDetails?.scheduleDetail?.scheduledPhase const cancelAtPeriodEnd = @@ -55,19 +54,19 @@ function ProPlanDetails() { )} {shouldRenderCancelLink({ cancelAtPeriodEnd, - plan, trialStatus, isFreePlan: planData?.plan?.isFreePlan, + plan: planData?.plan, }) && ( - - Cancel - - - )} + + Cancel + + + )} ) diff --git a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/SentryPlanDetails/SentryPlanDetails.jsx b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/SentryPlanDetails/SentryPlanDetails.jsx index 333e2e5de1..cf568f9643 100644 --- a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/SentryPlanDetails/SentryPlanDetails.jsx +++ b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/SentryPlanDetails/SentryPlanDetails.jsx @@ -18,11 +18,9 @@ function SentryPlanDetails() { const { data: plans } = useAvailablePlans({ provider, owner }) const { sentryPlanYear } = findSentryPlans({ plans }) - const plan = accountDetails?.rootOrganization?.plan ?? accountDetails?.plan const cancelAtPeriodEnd = accountDetails?.subscriptionDetail?.cancelAtPeriodEnd const trialStatus = planData?.plan?.trialStatus - return (

@@ -52,19 +50,19 @@ function SentryPlanDetails() { is a bug imo and needs to be here in a future ticket */} {shouldRenderCancelLink({ cancelAtPeriodEnd, - plan, + plan: planData?.plan, trialStatus, isFreePlan: planData?.plan?.isFreePlan, }) && ( - - Cancel - - - )} + + Cancel + + + )}

) diff --git a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/TeamPlanDetails/TeamPlanDetails.jsx b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/TeamPlanDetails/TeamPlanDetails.jsx index 3af2b4e546..acb731034f 100644 --- a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/TeamPlanDetails/TeamPlanDetails.jsx +++ b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/TeamPlanDetails/TeamPlanDetails.jsx @@ -19,7 +19,6 @@ function TeamPlanDetails() { const { data: plans } = useAvailablePlans({ provider, owner }) const { teamPlanYear, teamPlanMonth } = findTeamPlans({ plans }) - const plan = accountDetails?.rootOrganization?.plan ?? accountDetails?.plan const scheduledPhase = accountDetails?.scheduleDetail?.scheduledPhase const cancelAtPeriodEnd = @@ -55,19 +54,19 @@ function TeamPlanDetails() { )} {shouldRenderCancelLink({ cancelAtPeriodEnd, - plan, + plan: planData?.plan, trialStatus, isFreePlan: planData?.plan?.isFreePlan, }) && ( - - Cancel - - - )} + + Cancel + + + )} ) diff --git a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpdateBlurb/UpdateBlurb.tsx b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpdateBlurb/UpdateBlurb.tsx index acd2affb9d..5de93e8fb1 100644 --- a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpdateBlurb/UpdateBlurb.tsx +++ b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpdateBlurb/UpdateBlurb.tsx @@ -45,17 +45,15 @@ const UpdateBlurb = ({

Review your plan changes

{diffPlanType && ( -
  • {`You are changing from the ${ - currentIsFree ? 'Developer' : currentIsTeam ? 'Team' : 'Pro' - } plan to the [${selectedIsTeam ? 'Team' : 'Pro'} plan]`}
  • +
  • {`You are changing from the ${currentIsFree ? 'Developer' : currentIsTeam ? 'Team' : 'Pro' + } plan to the [${selectedIsTeam ? 'Team' : 'Pro'} plan]`}
  • )} {diffSeats && (
  • {`You are changing seats from ${currentPlan?.planUserCount} to [${seats}]`}
  • )} {diffBillingType && ( -
  • {`You are changing your billing cycle from ${ - currentIsAnnual ? 'Annual' : 'Monthly' - } to [${currentIsAnnual ? 'Monthly' : 'Annual'}]`}
  • +
  • {`You are changing your billing cycle from ${currentIsAnnual ? 'Annual' : 'Monthly' + } to [${currentIsAnnual ? 'Monthly' : 'Annual'}]`}
  • )}
    diff --git a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpdateButton/UpdateButton.test.tsx b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpdateButton/UpdateButton.test.tsx index 790d33bb61..024a8c5d05 100644 --- a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpdateButton/UpdateButton.test.tsx +++ b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpdateButton/UpdateButton.test.tsx @@ -77,12 +77,14 @@ const mockPlanTeamMonthly = { interface SetupArgs { planValue: string + planUserCount: number } describe('UpdateButton', () => { function setup( - { planValue = Plans.USERS_BASIC }: SetupArgs = { + { planValue = Plans.USERS_BASIC, planUserCount = 1 }: SetupArgs = { planValue: Plans.USERS_BASIC, + planUserCount: 1, } ) { server.use( @@ -138,7 +140,7 @@ describe('UpdateButton', () => { describe('when rendered', () => { describe('when there is a valid basic plan', () => { it('renders a valid Proceed to checkout button', async () => { - setup({ planValue: Plans.USERS_BASIC }) + setup({ planValue: Plans.USERS_BASIC, planUserCount: 1 }) const props = { isValid: true, @@ -158,7 +160,7 @@ describe('UpdateButton', () => { describe('when there is a valid pro plan', () => { it('renders a valid Update button', async () => { - setup({ planValue: Plans.USERS_PR_INAPPY }) + setup({ planValue: Plans.USERS_PR_INAPPY, planUserCount: 4 }) const props = { isValid: true, @@ -178,7 +180,7 @@ describe('UpdateButton', () => { describe('when the button is invalid', () => { it('renders a disabled valid Update button', async () => { - setup({ planValue: Plans.USERS_PR_INAPPY }) + setup({ planValue: Plans.USERS_PR_INAPPY, planUserCount: 4 }) const props = { isValid: false, @@ -198,7 +200,7 @@ describe('UpdateButton', () => { describe('when there are no changes in plan or seats', () => { it('renders a disabled valid Update button', async () => { - setup({ planValue: Plans.USERS_PR_INAPPM }) + setup({ planValue: Plans.USERS_PR_INAPPM, planUserCount: 4 }) const props = { isValid: true, diff --git a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpgradeForm.test.tsx b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpgradeForm.test.tsx index 8a201495e7..5482cf3843 100644 --- a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpgradeForm.test.tsx +++ b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpgradeForm.test.tsx @@ -204,7 +204,7 @@ const mockPlanDataResponseMonthly = { trialEndDate: '', trialTotalDays: 0, pretrialUsersCount: 0, - planUserCount: 1, + planUserCount: 10, hasSeatsLeft: true, isEnterprisePlan: false, } @@ -221,7 +221,7 @@ const mockPlanDataResponseYearly = { trialEndDate: '', trialTotalDays: 0, pretrialUsersCount: 0, - planUserCount: 1, + planUserCount: 10, hasSeatsLeft: true, isEnterprisePlan: false, } @@ -256,22 +256,22 @@ const wrapper: ( initialEntries?: string[] ) => React.FC = (initialEntries = ['/gh/codecov']) => - ({ children }) => ( - - - - {children} - - { - testLocation = location - return null - }} - /> - - - ) + ({ children }) => ( + + + + {children} + + { + testLocation = location + return null + }} + /> + + + ) type SetupArgs = { planValue?: (typeof Plans)[keyof typeof Plans] @@ -281,6 +281,7 @@ type SetupArgs = { hasTeamPlans?: boolean hasSentryPlans?: boolean monthlyPlan?: boolean + planUserCount?: number } describe('UpgradeForm', () => { @@ -292,6 +293,7 @@ describe('UpgradeForm', () => { hasTeamPlans = false, hasSentryPlans = false, monthlyPlan = true, + planUserCount = 1, }: SetupArgs) { const addNotification = vi.fn() const user = userEvent.setup() @@ -364,6 +366,8 @@ describe('UpgradeForm', () => { ...planResponse, trialStatus, isFreePlan: planValue === Plans.USERS_BASIC, + value: planValue, + planUserCount, }, }, }, @@ -726,7 +730,7 @@ describe('UpgradeForm', () => { }) it('renders the seat input with 10 seats (existing subscription)', async () => { - setup({ planValue: Plans.USERS_PR_INAPPM }) + setup({ planValue: Plans.USERS_PR_INAPPM, planUserCount: 10 }) render(, { wrapper: wrapper() }) const seatCount = await screen.findByRole('spinbutton') @@ -734,7 +738,7 @@ describe('UpgradeForm', () => { }) it('has the price for the year', async () => { - setup({ planValue: Plans.USERS_PR_INAPPM }) + setup({ planValue: Plans.USERS_PR_INAPPM, planUserCount: 10 }) render(, { wrapper: wrapper() }) const price = await screen.findByText(/\$120/) @@ -791,7 +795,10 @@ describe('UpgradeForm', () => { describe('when updating to a yearly plan', () => { it('has the price for the year', async () => { - const { user } = setup({ planValue: Plans.USERS_PR_INAPPM }) + const { user } = setup({ + planValue: Plans.USERS_PR_INAPPM, + planUserCount: 10, + }) render(, { wrapper: wrapper() }) const annualOption = await screen.findByRole('button', { @@ -994,7 +1001,7 @@ describe('UpgradeForm', () => { } as NonNullable, } it('renders the organization and owner titles', async () => { - setup({ planValue: Plans.USERS_PR_INAPPY }) + setup({ planValue: Plans.USERS_PR_INAPPY, monthlyPlan: false }) render(, { wrapper: wrapper() }) const organizationTitle = await screen.findByText(/Organization/) @@ -1004,7 +1011,7 @@ describe('UpgradeForm', () => { }) it('renders monthly option button', async () => { - setup({ planValue: Plans.USERS_PR_INAPPY }) + setup({ planValue: Plans.USERS_PR_INAPPY, monthlyPlan: false }) render(, { wrapper: wrapper() }) const optionBtn = await screen.findByRole('button', { name: 'Monthly' }) @@ -1012,7 +1019,7 @@ describe('UpgradeForm', () => { }) it('renders annual option button', async () => { - setup({ planValue: Plans.USERS_PR_INAPPY }) + setup({ planValue: Plans.USERS_PR_INAPPY, monthlyPlan: false }) render(, { wrapper: wrapper() }) const optionBtn = await screen.findByRole('button', { name: 'Annual' }) @@ -1029,7 +1036,11 @@ describe('UpgradeForm', () => { }) it('renders the seat input with 13 seats (existing subscription)', async () => { - setup({ planValue: Plans.USERS_PR_INAPPY }) + setup({ + planValue: Plans.USERS_PR_INAPPY, + monthlyPlan: false, + planUserCount: 13, + }) render(, { wrapper: wrapper() }) const seatCount = await screen.findByRole('spinbutton') @@ -1037,7 +1048,11 @@ describe('UpgradeForm', () => { }) it('has the price for the year', async () => { - setup({ planValue: Plans.USERS_PR_INAPPY }) + setup({ + planValue: Plans.USERS_PR_INAPPY, + monthlyPlan: false, + planUserCount: 13, + }) render(, { wrapper: wrapper() }) const price = await screen.findByText(/\$130/) @@ -1045,7 +1060,10 @@ describe('UpgradeForm', () => { }) it('renders validation error when the user selects less than 2 seats', async () => { - const { user } = setup({ planValue: Plans.USERS_PR_INAPPY }) + const { user } = setup({ + planValue: Plans.USERS_PR_INAPPY, + monthlyPlan: false, + }) render(, { wrapper: wrapper() }) const input = await screen.findByRole('spinbutton') @@ -1064,7 +1082,10 @@ describe('UpgradeForm', () => { }) it('renders validation error when the user selects less than number of active users', async () => { - const { user } = setup({ planValue: Plans.USERS_PR_INAPPY }) + const { user } = setup({ + planValue: Plans.USERS_PR_INAPPY, + monthlyPlan: false, + }) render(, { wrapper: wrapper() }) const input = await screen.findByRole('spinbutton') @@ -1083,7 +1104,7 @@ describe('UpgradeForm', () => { }) it('renders the update button', async () => { - setup({ planValue: Plans.USERS_PR_INAPPY }) + setup({ planValue: Plans.USERS_PR_INAPPY, monthlyPlan: false }) render(, { wrapper: wrapper() }) const update = await screen.findByRole('button', { @@ -1094,7 +1115,11 @@ describe('UpgradeForm', () => { describe('when updating to a monthly plan', () => { it('has the price for the month', async () => { - const { user } = setup({ planValue: Plans.USERS_PR_INAPPY }) + const { user } = setup({ + planValue: Plans.USERS_PR_INAPPY, + monthlyPlan: false, + planUserCount: 13, + }) render(, { wrapper: wrapper() }) const monthlyOption = await screen.findByRole('button', { @@ -1112,6 +1137,7 @@ describe('UpgradeForm', () => { setup({ planValue: Plans.USERS_PR_INAPPY, hasTeamPlans: true, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -1124,6 +1150,7 @@ describe('UpgradeForm', () => { setup({ planValue: Plans.USERS_PR_INAPPY, hasTeamPlans: true, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -1138,6 +1165,7 @@ describe('UpgradeForm', () => { const { user } = setup({ planValue: Plans.USERS_PR_INAPPY, hasTeamPlans: true, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -1171,6 +1199,7 @@ describe('UpgradeForm', () => { const { patchRequest, user } = setup({ successfulPatchRequest: true, planValue: Plans.USERS_PR_INAPPY, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -1197,6 +1226,7 @@ describe('UpgradeForm', () => { const { patchRequest, user } = setup({ successfulPatchRequest: true, planValue: Plans.USERS_PR_INAPPY, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -1228,6 +1258,7 @@ describe('UpgradeForm', () => { const { user } = setup({ successfulPatchRequest: true, planValue: Plans.USERS_PR_INAPPY, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -1255,6 +1286,7 @@ describe('UpgradeForm', () => { successfulPatchRequest: false, errorDetails: 'Insufficient funds.', planValue: Plans.USERS_PR_INAPPY, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -1285,6 +1317,7 @@ describe('UpgradeForm', () => { const { addNotification, user } = setup({ successfulPatchRequest: false, planValue: Plans.USERS_PR_INAPPY, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -1388,6 +1421,8 @@ describe('UpgradeForm', () => { setup({ planValue: Plans.USERS_SENTRYY, hasSentryPlans: true, + monthlyPlan: false, + planUserCount: 21, }) render(, { wrapper: wrapper() }) @@ -1399,6 +1434,8 @@ describe('UpgradeForm', () => { setup({ planValue: Plans.USERS_SENTRYY, hasSentryPlans: true, + monthlyPlan: false, + planUserCount: 21, }) render(, { wrapper: wrapper() }) @@ -1410,6 +1447,7 @@ describe('UpgradeForm', () => { const { user } = setup({ planValue: Plans.USERS_SENTRYY, hasSentryPlans: true, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -1432,6 +1470,7 @@ describe('UpgradeForm', () => { const { user } = setup({ planValue: Plans.USERS_SENTRYY, hasSentryPlans: true, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -1454,6 +1493,7 @@ describe('UpgradeForm', () => { setup({ planValue: Plans.USERS_SENTRYY, hasSentryPlans: true, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -1468,6 +1508,8 @@ describe('UpgradeForm', () => { const { user } = setup({ planValue: Plans.USERS_SENTRYY, hasSentryPlans: true, + monthlyPlan: false, + planUserCount: 21, }) render(, { wrapper: wrapper() }) @@ -1487,6 +1529,7 @@ describe('UpgradeForm', () => { successfulPatchRequest: true, hasSentryPlans: true, planValue: Plans.USERS_SENTRYY, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -1514,6 +1557,7 @@ describe('UpgradeForm', () => { successfulPatchRequest: true, hasSentryPlans: true, planValue: Plans.USERS_SENTRYY, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -1546,6 +1590,7 @@ describe('UpgradeForm', () => { successfulPatchRequest: true, hasSentryPlans: true, planValue: Plans.USERS_SENTRYY, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -1574,6 +1619,7 @@ describe('UpgradeForm', () => { hasSentryPlans: true, errorDetails: 'Insufficient funds.', planValue: Plans.USERS_SENTRYY, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -1605,6 +1651,7 @@ describe('UpgradeForm', () => { successfulPatchRequest: false, hasSentryPlans: true, planValue: Plans.USERS_SENTRYY, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -1644,6 +1691,7 @@ describe('UpgradeForm', () => { setup({ planValue: Plans.USERS_TEAMY, hasTeamPlans: true, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -1657,6 +1705,7 @@ describe('UpgradeForm', () => { const { user } = setup({ planValue: Plans.USERS_TEAMY, hasTeamPlans: true, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -1673,6 +1722,7 @@ describe('UpgradeForm', () => { setup({ planValue: Plans.USERS_TEAMY, hasTeamPlans: true, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -1684,6 +1734,7 @@ describe('UpgradeForm', () => { setup({ planValue: Plans.USERS_TEAMY, hasTeamPlans: true, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -1708,6 +1759,7 @@ describe('UpgradeForm', () => { setup({ planValue: Plans.USERS_TEAMY, hasTeamPlans: true, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -1719,6 +1771,7 @@ describe('UpgradeForm', () => { setup({ planValue: Plans.USERS_TEAMY, hasTeamPlans: true, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -1730,6 +1783,7 @@ describe('UpgradeForm', () => { const { user } = setup({ planValue: Plans.USERS_TEAMY, hasTeamPlans: true, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -1829,6 +1883,7 @@ describe('UpgradeForm', () => { successfulPatchRequest: true, hasTeamPlans: true, planValue: Plans.USERS_TEAMY, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -1861,6 +1916,7 @@ describe('UpgradeForm', () => { successfulPatchRequest: true, hasTeamPlans: true, planValue: Plans.USERS_TEAMY, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -1893,6 +1949,7 @@ describe('UpgradeForm', () => { successfulPatchRequest: true, hasTeamPlans: true, planValue: Plans.USERS_TEAMY, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -1921,6 +1978,7 @@ describe('UpgradeForm', () => { hasTeamPlans: true, errorDetails: 'Insufficient funds.', planValue: Plans.USERS_TEAMY, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -1952,6 +2010,7 @@ describe('UpgradeForm', () => { successfulPatchRequest: false, hasTeamPlans: true, planValue: Plans.USERS_TEAMY, + monthlyPlan: false, }) render(, { wrapper: wrapper() }) @@ -2015,4 +2074,4 @@ describe('UpgradeForm', () => { }) }) }) -}) +}) \ No newline at end of file diff --git a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpgradeForm.tsx b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpgradeForm.tsx index 9df25c9fe3..65fa792b7d 100644 --- a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpgradeForm.tsx +++ b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpgradeForm.tsx @@ -72,8 +72,7 @@ function UpgradeForm({ selectedPlan, setSelectedPlan }: UpgradeFormProps) { plans, trialStatus, selectedPlan, - isEnterprisePlan: planData?.plan?.isEnterprisePlan, - isFreePlan: planData?.plan?.isFreePlan, + plan: planData?.plan, }), resolver: zodResolver( getSchema({ @@ -81,6 +80,7 @@ function UpgradeForm({ selectedPlan, setSelectedPlan }: UpgradeFormProps) { minSeats, trialStatus, selectedPlan, + planName: planData?.plan?.value, }) ), mode: 'onChange', @@ -129,4 +129,4 @@ function UpgradeForm({ selectedPlan, setSelectedPlan }: UpgradeFormProps) { ) } -export default UpgradeForm +export default UpgradeForm \ No newline at end of file diff --git a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradePlanPage.jsx b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradePlanPage.jsx index 9e886fedc3..a0eb1dc3d3 100644 --- a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradePlanPage.jsx +++ b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradePlanPage.jsx @@ -1,11 +1,7 @@ import { useLayoutEffect, useState } from 'react' import { Redirect, useParams } from 'react-router-dom' -import { - useAccountDetails, - useAvailablePlans, - usePlanData, -} from 'services/account' +import { useAvailablePlans, usePlanData } from 'services/account' import { TierNames } from 'services/tier' import { canApplySentryUpgrade, @@ -25,7 +21,6 @@ import { useSetCrumbs } from '../../context' function UpgradePlanPage() { const { provider, owner } = useParams() const setCrumbs = useSetCrumbs() - const { data: accountDetails } = useAccountDetails({ provider, owner }) const { data: plans } = useAvailablePlans({ provider, owner }) const { data: planData } = usePlanData({ provider, owner }) const planParam = usePlanParams() @@ -35,8 +30,6 @@ function UpgradePlanPage() { const { teamPlanYear } = findTeamPlans({ plans }) const hasTeamPlans = shouldDisplayTeamCard({ plans }) - const plan = accountDetails?.rootOrganization?.plan ?? accountDetails?.plan - const isSentryUpgrade = canApplySentryUpgrade({ isEnterprisePlan: planData?.plan?.isEnterprisePlan, plans, @@ -45,7 +38,7 @@ function UpgradePlanPage() { let defaultPaidYearlyPlan = null if ( (hasTeamPlans && planParam === TierNames.TEAM) || - isTeamPlan(plan?.value) + isTeamPlan(planData?.plan?.value) ) { defaultPaidYearlyPlan = teamPlanYear } else if (isSentryUpgrade) { diff --git a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradePlanPage.test.jsx b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradePlanPage.test.jsx index 7ee7240999..610b64692f 100644 --- a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradePlanPage.test.jsx +++ b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradePlanPage.test.jsx @@ -211,6 +211,7 @@ describe('UpgradePlanPage', () => { ...mockPlanData, isEnterprisePlan: planValue === Plans.USERS_ENTERPRISEM, isFreePlan: planValue === Plans.USERS_BASIC, + value: planValue, }, }, }, diff --git a/src/shared/utils/upgradeForm.test.ts b/src/shared/utils/upgradeForm.test.ts index 927cba75a5..e37e979bff 100644 --- a/src/shared/utils/upgradeForm.test.ts +++ b/src/shared/utils/upgradeForm.test.ts @@ -112,6 +112,11 @@ describe('getDefaultValuesUpgradeForm', () => { accountDetails, selectedPlan: proPlanYear, plans: [proPlanYear], + plan: { + billingRate: 'yearly', + value: Plans.USERS_PR_INAPPY, + planUserCount: 1, + } as Plan, }) expect(data).toStrictEqual({ @@ -129,6 +134,11 @@ describe('getDefaultValuesUpgradeForm', () => { accountDetails, selectedPlan: proPlanYear, plans: [proPlanYear, sentryPlanYear], + plan: { + billingRate: 'yearly', + value: Plans.USERS_PR_INAPPY, + planUserCount: 1, + } as Plan, }) expect(data).toStrictEqual({ @@ -148,6 +158,11 @@ describe('getDefaultValuesUpgradeForm', () => { accountDetails, selectedPlan: proPlanYear, plans: [teamPlanMonth], + plan: { + billingRate: 'monthly', + value: Plans.USERS_TEAMM, + planUserCount: 1, + } as Plan, }) expect(data).toStrictEqual({ @@ -165,6 +180,11 @@ describe('getDefaultValuesUpgradeForm', () => { accountDetails, selectedPlan: proPlanYear, plans: [proPlanYear, sentryPlanYear], + plan: { + billingRate: 'monthly', + value: Plans.USERS_SENTRYY, + planUserCount: 1, + } as Plan, }) expect(data).toStrictEqual({ @@ -183,6 +203,11 @@ describe('getDefaultValuesUpgradeForm', () => { accountDetails, selectedPlan: proPlanYear, plans: [proPlanYear], + plan: { + billingRate: 'monthly', + value: Plans.USERS_PR_INAPPM, + planUserCount: 2, + } as Plan, }) expect(data).toStrictEqual({ @@ -522,7 +547,7 @@ describe('shouldRenderCancelLink', () => { // eslint-disable-next-line testing-library/render-result-naming-convention const value = shouldRenderCancelLink({ cancelAtPeriodEnd: false, - plan: { value: Plans.USERS_PR_INAPPY } as Plan, + plan: Plans.USERS_PR_INAPPY, trialStatus: TrialStatuses.NOT_STARTED, isFreePlan: false, }) @@ -535,7 +560,7 @@ describe('shouldRenderCancelLink', () => { // eslint-disable-next-line testing-library/render-result-naming-convention const cancelLinkResult = shouldRenderCancelLink({ cancelAtPeriodEnd: false, - plan: { value: Plans.USERS_BASIC } as Plan, + plan: Plans.USERS_BASIC, trialStatus: TrialStatuses.NOT_STARTED, isFreePlan: true, }) @@ -549,7 +574,7 @@ describe('shouldRenderCancelLink', () => { // eslint-disable-next-line testing-library/render-result-naming-convention const cancelLinkResult = shouldRenderCancelLink({ cancelAtPeriodEnd: false, - plan: { value: Plans.USERS_TRIAL } as Plan, + plan: Plans.USERS_TRIAL, trialStatus: TrialStatuses.ONGOING, isFreePlan: false, }) @@ -563,7 +588,7 @@ describe('shouldRenderCancelLink', () => { // eslint-disable-next-line testing-library/render-result-naming-convention const cancelLinkResult = shouldRenderCancelLink({ cancelAtPeriodEnd: true, - plan: { value: Plans.USERS_PR_INAPPY } as Plan, + plan: Plans.USERS_PR_INAPPY, trialStatus: TrialStatuses.NOT_STARTED, isFreePlan: false, }) @@ -586,6 +611,11 @@ describe('shouldRenderCancelLink', () => { accountDetails, plans, selectedPlan: { value: Plans.USERS_TEAMY } as Plan, + plan: { + billingRate: 'yearly', + value: Plans.USERS_TEAMY, + planUserCount: 1, + } as Plan, }) expect(data).toStrictEqual({ diff --git a/src/shared/utils/upgradeForm.ts b/src/shared/utils/upgradeForm.ts index 2ab065110b..50c3983fdc 100644 --- a/src/shared/utils/upgradeForm.ts +++ b/src/shared/utils/upgradeForm.ts @@ -19,6 +19,7 @@ import { PlanName, Plans, } from 'shared/utils/billing' +import { Plan as PlanData } from 'services/account' export const MIN_NB_SEATS_PRO = 2 export const MIN_SENTRY_SEATS = 5 @@ -63,11 +64,13 @@ export const getSchema = ({ minSeats = 1, trialStatus, selectedPlan, + planName, }: { accountDetails?: z.infer minSeats?: number trialStatus?: TrialStatus selectedPlan?: Plan + planName?: PlanName }) => z.object({ seats: z.coerce @@ -92,7 +95,7 @@ export const getSchema = ({ if ( trialStatus === TrialStatuses.ONGOING && - accountDetails?.plan?.value === Plans.USERS_TRIAL + planName === Plans.USERS_TRIAL ) { return val } @@ -144,7 +147,7 @@ export function shouldRenderCancelLink({ isFreePlan, }: { cancelAtPeriodEnd: boolean - plan: Plan + plan: PlanName trialStatus: TrialStatus isFreePlan: boolean }) { @@ -154,7 +157,7 @@ export function shouldRenderCancelLink({ } // if user is on trial can't cancel plan - if (isTrialPlan(plan?.value) && trialStatus === TrialStatuses.ONGOING) { + if (isTrialPlan(plan) && trialStatus === TrialStatuses.ONGOING) { return false } @@ -216,19 +219,14 @@ export const getDefaultValuesUpgradeForm = ({ plans, trialStatus, selectedPlan, - isEnterprisePlan, - isFreePlan, + plan, }: { accountDetails?: z.infer | null plans?: Plan[] | null trialStatus?: TrialStatus selectedPlan?: Plan | null - isEnterprisePlan?: boolean - isFreePlan?: boolean + plan?: PlanData | null }) => { - const currentPlan = accountDetails?.plan - const currentPlanValue = currentPlan?.value - const quantity = currentPlan?.quantity ?? 0 const activatedUserCount = accountDetails?.activatedUserCount const inactiveUserCount = accountDetails?.inactiveUserCount @@ -237,29 +235,29 @@ export const getDefaultValuesUpgradeForm = ({ const { teamPlanYear, teamPlanMonth } = findTeamPlans({ plans }) const isSentryUpgrade = canApplySentryUpgrade({ - isEnterprisePlan, + isEnterprisePlan: plan?.isEnterprisePlan, plans, }) - const isMonthlyPlan = accountDetails?.plan?.billingRate === 'monthly' + const isMonthlyPlan = plan?.billingRate === 'monthly' let newPlan = proPlanYear?.value - if (isSentryUpgrade && !isSentryPlan(currentPlanValue)) { + if (isSentryUpgrade && !isSentryPlan(plan?.value)) { newPlan = isMonthlyPlan ? sentryPlanMonth?.value : sentryPlanYear?.value - } else if (isTeamPlan(currentPlanValue) || isTeamPlan(selectedPlan?.value)) { + } else if (isTeamPlan(plan?.value) || isTeamPlan(selectedPlan?.value)) { newPlan = isMonthlyPlan ? teamPlanMonth?.value : teamPlanYear?.value - } else if (isPaidPlan(currentPlanValue)) { - newPlan = currentPlanValue + } else if (isPaidPlan(plan?.value)) { + newPlan = plan?.value } const seats = extractSeats({ - value: currentPlanValue, - quantity, + value: plan?.value, + quantity: plan?.planUserCount ?? 0, activatedUserCount, inactiveUserCount, trialStatus, isSentryUpgrade, - isFreePlan, + isFreePlan: plan?.value === Plans.USERS_BASIC, }) return { From 733a1ebab2901db3aa6ab1c0a283cf084da67c9b Mon Sep 17 00:00:00 2001 From: RulaKhaled Date: Mon, 16 Dec 2024 21:17:38 +0200 Subject: [PATCH 02/11] update tests --- .../shared/ActionsBilling/ActionsBilling.test.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/PlanPage/subRoutes/CurrentOrgPlan/CurrentPlanCard/shared/ActionsBilling/ActionsBilling.test.jsx b/src/pages/PlanPage/subRoutes/CurrentOrgPlan/CurrentPlanCard/shared/ActionsBilling/ActionsBilling.test.jsx index 38e1199487..5096b38bac 100644 --- a/src/pages/PlanPage/subRoutes/CurrentOrgPlan/CurrentPlanCard/shared/ActionsBilling/ActionsBilling.test.jsx +++ b/src/pages/PlanPage/subRoutes/CurrentOrgPlan/CurrentPlanCard/shared/ActionsBilling/ActionsBilling.test.jsx @@ -631,6 +631,7 @@ describe('Actions Billing', () => { accountDetails: sentryMockedAccountDetails, plans: sentryPlans, trialPlanData: { + hasPrivateRepos: true, plan: { ...mockTrialData.plan, value: Plans.USERS_SENTRYM, From fe231640e1e51a67b4a7f55ce6f6757313db4897 Mon Sep 17 00:00:00 2001 From: RulaKhaled Date: Wed, 18 Dec 2024 01:03:58 +0200 Subject: [PATCH 03/11] don't know why this was here --- .../CancelPlanPage/subRoutes/DowngradePlan/DowngradePlan.jsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pages/PlanPage/subRoutes/CancelPlanPage/subRoutes/DowngradePlan/DowngradePlan.jsx b/src/pages/PlanPage/subRoutes/CancelPlanPage/subRoutes/DowngradePlan/DowngradePlan.jsx index 3ef0358b28..803ea0e442 100644 --- a/src/pages/PlanPage/subRoutes/CancelPlanPage/subRoutes/DowngradePlan/DowngradePlan.jsx +++ b/src/pages/PlanPage/subRoutes/CancelPlanPage/subRoutes/DowngradePlan/DowngradePlan.jsx @@ -70,7 +70,6 @@ function DowngradePlan() { Date: Wed, 18 Dec 2024 01:14:21 +0200 Subject: [PATCH 04/11] update types --- src/shared/utils/upgradeForm.test.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/shared/utils/upgradeForm.test.ts b/src/shared/utils/upgradeForm.test.ts index e37e979bff..0988f1b62e 100644 --- a/src/shared/utils/upgradeForm.test.ts +++ b/src/shared/utils/upgradeForm.test.ts @@ -1,6 +1,6 @@ import { z } from 'zod' -import { AccountDetailsSchema, Plan, TrialStatuses } from 'services/account' +import { AccountDetailsSchema, Plan, Plan as PlanData , TrialStatuses } from 'services/account' import { Plans } from 'shared/utils/billing' import { @@ -14,6 +14,7 @@ import { shouldRenderCancelLink, } from './upgradeForm' + describe('calculatePrice', () => { describe('isSentryUpgrade is true and isSelectedPlanTeam is false', () => { describe('seat count is at five', () => { @@ -116,7 +117,7 @@ describe('getDefaultValuesUpgradeForm', () => { billingRate: 'yearly', value: Plans.USERS_PR_INAPPY, planUserCount: 1, - } as Plan, + } as PlanData, }) expect(data).toStrictEqual({ @@ -138,7 +139,7 @@ describe('getDefaultValuesUpgradeForm', () => { billingRate: 'yearly', value: Plans.USERS_PR_INAPPY, planUserCount: 1, - } as Plan, + } as PlanData, }) expect(data).toStrictEqual({ @@ -162,7 +163,7 @@ describe('getDefaultValuesUpgradeForm', () => { billingRate: 'monthly', value: Plans.USERS_TEAMM, planUserCount: 1, - } as Plan, + } as PlanData, }) expect(data).toStrictEqual({ @@ -184,7 +185,7 @@ describe('getDefaultValuesUpgradeForm', () => { billingRate: 'monthly', value: Plans.USERS_SENTRYY, planUserCount: 1, - } as Plan, + } as PlanData, }) expect(data).toStrictEqual({ @@ -207,7 +208,7 @@ describe('getDefaultValuesUpgradeForm', () => { billingRate: 'monthly', value: Plans.USERS_PR_INAPPM, planUserCount: 2, - } as Plan, + } as PlanData, }) expect(data).toStrictEqual({ @@ -615,7 +616,7 @@ describe('shouldRenderCancelLink', () => { billingRate: 'yearly', value: Plans.USERS_TEAMY, planUserCount: 1, - } as Plan, + } as PlanData, }) expect(data).toStrictEqual({ From 786a3c14ff15dc8722a03624e92aed5f7e5c928a Mon Sep 17 00:00:00 2001 From: RulaKhaled Date: Wed, 18 Dec 2024 01:17:52 +0200 Subject: [PATCH 05/11] update with types --- src/shared/utils/upgradeForm.test.ts | 16 ++++++++++------ src/shared/utils/upgradeForm.ts | 9 ++++----- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/shared/utils/upgradeForm.test.ts b/src/shared/utils/upgradeForm.test.ts index 0988f1b62e..c9ddf5e98f 100644 --- a/src/shared/utils/upgradeForm.test.ts +++ b/src/shared/utils/upgradeForm.test.ts @@ -1,6 +1,11 @@ import { z } from 'zod' -import { AccountDetailsSchema, Plan, Plan as PlanData , TrialStatuses } from 'services/account' +import { + AccountDetailsSchema, + Plan, + Plan as PlanData, + TrialStatuses, +} from 'services/account' import { Plans } from 'shared/utils/billing' import { @@ -14,7 +19,6 @@ import { shouldRenderCancelLink, } from './upgradeForm' - describe('calculatePrice', () => { describe('isSentryUpgrade is true and isSelectedPlanTeam is false', () => { describe('seat count is at five', () => { @@ -548,7 +552,7 @@ describe('shouldRenderCancelLink', () => { // eslint-disable-next-line testing-library/render-result-naming-convention const value = shouldRenderCancelLink({ cancelAtPeriodEnd: false, - plan: Plans.USERS_PR_INAPPY, + plan: { value: Plans.USERS_PR_INAPPY } as PlanData, trialStatus: TrialStatuses.NOT_STARTED, isFreePlan: false, }) @@ -561,7 +565,7 @@ describe('shouldRenderCancelLink', () => { // eslint-disable-next-line testing-library/render-result-naming-convention const cancelLinkResult = shouldRenderCancelLink({ cancelAtPeriodEnd: false, - plan: Plans.USERS_BASIC, + plan: { value: Plans.USERS_BASIC } as PlanData, trialStatus: TrialStatuses.NOT_STARTED, isFreePlan: true, }) @@ -575,7 +579,7 @@ describe('shouldRenderCancelLink', () => { // eslint-disable-next-line testing-library/render-result-naming-convention const cancelLinkResult = shouldRenderCancelLink({ cancelAtPeriodEnd: false, - plan: Plans.USERS_TRIAL, + plan: { value: Plans.USERS_TRIAL } as PlanData, trialStatus: TrialStatuses.ONGOING, isFreePlan: false, }) @@ -589,7 +593,7 @@ describe('shouldRenderCancelLink', () => { // eslint-disable-next-line testing-library/render-result-naming-convention const cancelLinkResult = shouldRenderCancelLink({ cancelAtPeriodEnd: true, - plan: Plans.USERS_PR_INAPPY, + plan: { value: Plans.USERS_PR_INAPPY } as PlanData, trialStatus: TrialStatuses.NOT_STARTED, isFreePlan: false, }) diff --git a/src/shared/utils/upgradeForm.ts b/src/shared/utils/upgradeForm.ts index 50c3983fdc..acd3a2b004 100644 --- a/src/shared/utils/upgradeForm.ts +++ b/src/shared/utils/upgradeForm.ts @@ -3,9 +3,9 @@ import { z } from 'zod' import { AccountDetailsSchema, + Plan as PlanData, TrialStatus, - TrialStatuses, -} from 'services/account' + TrialStatuses } from 'services/account' import { canApplySentryUpgrade, findProPlans, @@ -19,7 +19,6 @@ import { PlanName, Plans, } from 'shared/utils/billing' -import { Plan as PlanData } from 'services/account' export const MIN_NB_SEATS_PRO = 2 export const MIN_SENTRY_SEATS = 5 @@ -147,7 +146,7 @@ export function shouldRenderCancelLink({ isFreePlan, }: { cancelAtPeriodEnd: boolean - plan: PlanName + plan: PlanData | null trialStatus: TrialStatus isFreePlan: boolean }) { @@ -157,7 +156,7 @@ export function shouldRenderCancelLink({ } // if user is on trial can't cancel plan - if (isTrialPlan(plan) && trialStatus === TrialStatuses.ONGOING) { + if (isTrialPlan(plan?.value) && trialStatus === TrialStatuses.ONGOING) { return false } From c78d34d4a757441f30dc20d8a1dd4178aea71579 Mon Sep 17 00:00:00 2001 From: RulaKhaled Date: Wed, 18 Dec 2024 01:25:43 +0200 Subject: [PATCH 06/11] update with types --- .../MembersList/MembersList.test.jsx | 1 - .../ActionsBilling/ActionsBilling.test.jsx | 19 ------------------- .../UpdateButton/UpdateButton.test.tsx | 12 +++++------- 3 files changed, 5 insertions(+), 27 deletions(-) diff --git a/src/pages/MembersPage/MembersList/MembersList.test.jsx b/src/pages/MembersPage/MembersList/MembersList.test.jsx index d9473062e8..edc6884330 100644 --- a/src/pages/MembersPage/MembersList/MembersList.test.jsx +++ b/src/pages/MembersPage/MembersList/MembersList.test.jsx @@ -80,7 +80,6 @@ afterAll(() => { server.close() }) - describe('MembersList', () => { let testLocation diff --git a/src/pages/PlanPage/subRoutes/CurrentOrgPlan/CurrentPlanCard/shared/ActionsBilling/ActionsBilling.test.jsx b/src/pages/PlanPage/subRoutes/CurrentOrgPlan/CurrentPlanCard/shared/ActionsBilling/ActionsBilling.test.jsx index 5096b38bac..a28e4c6339 100644 --- a/src/pages/PlanPage/subRoutes/CurrentOrgPlan/CurrentPlanCard/shared/ActionsBilling/ActionsBilling.test.jsx +++ b/src/pages/PlanPage/subRoutes/CurrentOrgPlan/CurrentPlanCard/shared/ActionsBilling/ActionsBilling.test.jsx @@ -254,7 +254,6 @@ describe('Actions Billing', () => { plan: { ...mockTrialData.plan, trialStatus: TrialStatuses.NOT_STARTED, - value: Plans.USERS_BASIC, }, }, hasPrivateRepos: true, @@ -276,7 +275,6 @@ describe('Actions Billing', () => { plan: { ...mockTrialData.plan, trialStatus: TrialStatuses.NOT_STARTED, - value: Plans.USERS_BASIC, }, }, hasPrivateRepos: true, @@ -336,7 +334,6 @@ describe('Actions Billing', () => { plan: { ...mockTrialData.plan, trialStatus: TrialStatuses.NOT_STARTED, - value: Plans.USERS_BASIC, }, }, hasPrivateRepos: false, @@ -358,7 +355,6 @@ describe('Actions Billing', () => { plan: { ...mockTrialData.plan, trialStatus: TrialStatuses.NOT_STARTED, - value: Plans.USERS_BASIC, }, }, hasPrivateRepos: false, @@ -386,7 +382,6 @@ describe('Actions Billing', () => { plan: { ...mockTrialData.plan, trialStatus: TrialStatuses.ONGOING, - value: Plans.USERS_TRIAL, }, }, hasPrivateRepos: true, @@ -409,12 +404,6 @@ describe('Actions Billing', () => { it('renders manage plan link', async () => { setup({ accountDetails: mockedProAccountDetails, - trialPlanData: { - plan: { - ...mockTrialData.plan, - value: Plans.USERS_PR_INAPPM, - }, - }, }) render(, { wrapper }) @@ -606,7 +595,6 @@ describe('Actions Billing', () => { plan: { ...mockTrialData.plan, trialStatus: TrialStatuses.ONGOING, - value: Plans.USERS_TRIAL, }, }, }) @@ -630,13 +618,6 @@ describe('Actions Billing', () => { setup({ accountDetails: sentryMockedAccountDetails, plans: sentryPlans, - trialPlanData: { - hasPrivateRepos: true, - plan: { - ...mockTrialData.plan, - value: Plans.USERS_SENTRYM, - }, - }, }) render(, { wrapper }) diff --git a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpdateButton/UpdateButton.test.tsx b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpdateButton/UpdateButton.test.tsx index 024a8c5d05..790d33bb61 100644 --- a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpdateButton/UpdateButton.test.tsx +++ b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpdateButton/UpdateButton.test.tsx @@ -77,14 +77,12 @@ const mockPlanTeamMonthly = { interface SetupArgs { planValue: string - planUserCount: number } describe('UpdateButton', () => { function setup( - { planValue = Plans.USERS_BASIC, planUserCount = 1 }: SetupArgs = { + { planValue = Plans.USERS_BASIC }: SetupArgs = { planValue: Plans.USERS_BASIC, - planUserCount: 1, } ) { server.use( @@ -140,7 +138,7 @@ describe('UpdateButton', () => { describe('when rendered', () => { describe('when there is a valid basic plan', () => { it('renders a valid Proceed to checkout button', async () => { - setup({ planValue: Plans.USERS_BASIC, planUserCount: 1 }) + setup({ planValue: Plans.USERS_BASIC }) const props = { isValid: true, @@ -160,7 +158,7 @@ describe('UpdateButton', () => { describe('when there is a valid pro plan', () => { it('renders a valid Update button', async () => { - setup({ planValue: Plans.USERS_PR_INAPPY, planUserCount: 4 }) + setup({ planValue: Plans.USERS_PR_INAPPY }) const props = { isValid: true, @@ -180,7 +178,7 @@ describe('UpdateButton', () => { describe('when the button is invalid', () => { it('renders a disabled valid Update button', async () => { - setup({ planValue: Plans.USERS_PR_INAPPY, planUserCount: 4 }) + setup({ planValue: Plans.USERS_PR_INAPPY }) const props = { isValid: false, @@ -200,7 +198,7 @@ describe('UpdateButton', () => { describe('when there are no changes in plan or seats', () => { it('renders a disabled valid Update button', async () => { - setup({ planValue: Plans.USERS_PR_INAPPM, planUserCount: 4 }) + setup({ planValue: Plans.USERS_PR_INAPPM }) const props = { isValid: true, From 5566f6a4a705792db16fad469748b06e3b7993e6 Mon Sep 17 00:00:00 2001 From: RulaKhaled Date: Wed, 18 Dec 2024 01:33:23 +0200 Subject: [PATCH 07/11] update lint --- .../TeamPlanDetails/TeamPlanDetails.jsx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/TeamPlanDetails/TeamPlanDetails.jsx b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/TeamPlanDetails/TeamPlanDetails.jsx index acb731034f..b9361fd187 100644 --- a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/TeamPlanDetails/TeamPlanDetails.jsx +++ b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/TeamPlanDetails/TeamPlanDetails.jsx @@ -58,15 +58,15 @@ function TeamPlanDetails() { trialStatus, isFreePlan: planData?.plan?.isFreePlan, }) && ( - - Cancel - - - )} + + Cancel + + + )}
    ) From 9ec400279e675ea7c66102e5469e9eecc18536b5 Mon Sep 17 00:00:00 2001 From: RulaKhaled Date: Wed, 18 Dec 2024 01:34:44 +0200 Subject: [PATCH 08/11] more lint fixing --- .../MembersTable/MembersTable.test.jsx | 16 ++++----- .../ProPlanDetails/ProPlanDetails.jsx | 18 +++++----- .../SentryPlanDetails/SentryPlanDetails.jsx | 18 +++++----- .../UpgradeForm/UpdateBlurb/UpdateBlurb.tsx | 10 +++--- .../UpgradeForm/UpgradeForm.test.tsx | 34 +++++++++---------- .../UpgradeForm/UpgradeForm.tsx | 2 +- 6 files changed, 50 insertions(+), 48 deletions(-) diff --git a/src/pages/MembersPage/MembersList/MembersTable/MembersTable.test.jsx b/src/pages/MembersPage/MembersList/MembersTable/MembersTable.test.jsx index bfb8239927..c7d8a6e0b9 100644 --- a/src/pages/MembersPage/MembersList/MembersTable/MembersTable.test.jsx +++ b/src/pages/MembersPage/MembersList/MembersTable/MembersTable.test.jsx @@ -106,7 +106,7 @@ const mockPlanData = { const server = setupServer() beforeAll(() => server.listen()) -beforeEach(() => { }) +beforeEach(() => {}) afterEach(() => { queryClient.clear() server.resetHandlers() @@ -118,13 +118,13 @@ describe('MembersTable', () => { const wrapper = (initialEntries = ['/gh/codecov']) => - ({ children }) => ( - - - {children} - - - ) + ({ children }) => ( + + + {children} + + + ) function setup({ mockUserRequest = mockBaseUserRequest(false), diff --git a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/ProPlanDetails/ProPlanDetails.jsx b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/ProPlanDetails/ProPlanDetails.jsx index 808e66e5d5..2098cd8662 100644 --- a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/ProPlanDetails/ProPlanDetails.jsx +++ b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/ProPlanDetails/ProPlanDetails.jsx @@ -58,15 +58,15 @@ function ProPlanDetails() { isFreePlan: planData?.plan?.isFreePlan, plan: planData?.plan, }) && ( - - Cancel - - - )} + + Cancel + + + )} ) diff --git a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/SentryPlanDetails/SentryPlanDetails.jsx b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/SentryPlanDetails/SentryPlanDetails.jsx index cf568f9643..30f846f54e 100644 --- a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/SentryPlanDetails/SentryPlanDetails.jsx +++ b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/SentryPlanDetails/SentryPlanDetails.jsx @@ -54,15 +54,15 @@ function SentryPlanDetails() { trialStatus, isFreePlan: planData?.plan?.isFreePlan, }) && ( - - Cancel - - - )} + + Cancel + + + )} ) diff --git a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpdateBlurb/UpdateBlurb.tsx b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpdateBlurb/UpdateBlurb.tsx index 5de93e8fb1..acd2affb9d 100644 --- a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpdateBlurb/UpdateBlurb.tsx +++ b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpdateBlurb/UpdateBlurb.tsx @@ -45,15 +45,17 @@ const UpdateBlurb = ({

    Review your plan changes

    {diffPlanType && ( -
  • {`You are changing from the ${currentIsFree ? 'Developer' : currentIsTeam ? 'Team' : 'Pro' - } plan to the [${selectedIsTeam ? 'Team' : 'Pro'} plan]`}
  • +
  • {`You are changing from the ${ + currentIsFree ? 'Developer' : currentIsTeam ? 'Team' : 'Pro' + } plan to the [${selectedIsTeam ? 'Team' : 'Pro'} plan]`}
  • )} {diffSeats && (
  • {`You are changing seats from ${currentPlan?.planUserCount} to [${seats}]`}
  • )} {diffBillingType && ( -
  • {`You are changing your billing cycle from ${currentIsAnnual ? 'Annual' : 'Monthly' - } to [${currentIsAnnual ? 'Monthly' : 'Annual'}]`}
  • +
  • {`You are changing your billing cycle from ${ + currentIsAnnual ? 'Annual' : 'Monthly' + } to [${currentIsAnnual ? 'Monthly' : 'Annual'}]`}
  • )}
    diff --git a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpgradeForm.test.tsx b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpgradeForm.test.tsx index 5482cf3843..22c4d122bc 100644 --- a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpgradeForm.test.tsx +++ b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpgradeForm.test.tsx @@ -256,22 +256,22 @@ const wrapper: ( initialEntries?: string[] ) => React.FC = (initialEntries = ['/gh/codecov']) => - ({ children }) => ( - - - - {children} - - { - testLocation = location - return null - }} - /> - - - ) + ({ children }) => ( + + + + {children} + + { + testLocation = location + return null + }} + /> + + + ) type SetupArgs = { planValue?: (typeof Plans)[keyof typeof Plans] @@ -2074,4 +2074,4 @@ describe('UpgradeForm', () => { }) }) }) -}) \ No newline at end of file +}) diff --git a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpgradeForm.tsx b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpgradeForm.tsx index 65fa792b7d..7deff8ebbb 100644 --- a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpgradeForm.tsx +++ b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeForm/UpgradeForm.tsx @@ -129,4 +129,4 @@ function UpgradeForm({ selectedPlan, setSelectedPlan }: UpgradeFormProps) { ) } -export default UpgradeForm \ No newline at end of file +export default UpgradeForm From 2ec4df02fa1a6b063bb1b640d55c002291b640de Mon Sep 17 00:00:00 2001 From: RulaKhaled Date: Wed, 18 Dec 2024 01:39:41 +0200 Subject: [PATCH 09/11] last refactor --- .../UpgradeDetails/SentryPlanDetails/SentryPlanDetails.jsx | 1 - .../UpgradeDetails/TeamPlanDetails/TeamPlanDetails.jsx | 1 - src/shared/utils/upgradeForm.ts | 7 +++---- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/SentryPlanDetails/SentryPlanDetails.jsx b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/SentryPlanDetails/SentryPlanDetails.jsx index 30f846f54e..56119c1442 100644 --- a/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/SentryPlanDetails/SentryPlanDetails.jsx +++ b/src/pages/PlanPage/subRoutes/UpgradePlanPage/UpgradeDetails/SentryPlanDetails/SentryPlanDetails.jsx @@ -52,7 +52,6 @@ function SentryPlanDetails() { cancelAtPeriodEnd, plan: planData?.plan, trialStatus, - isFreePlan: planData?.plan?.isFreePlan, }) && ( Date: Wed, 18 Dec 2024 01:47:59 +0200 Subject: [PATCH 10/11] tests failing --- src/shared/utils/upgradeForm.test.ts | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/shared/utils/upgradeForm.test.ts b/src/shared/utils/upgradeForm.test.ts index c9ddf5e98f..f8d83e5310 100644 --- a/src/shared/utils/upgradeForm.test.ts +++ b/src/shared/utils/upgradeForm.test.ts @@ -468,7 +468,6 @@ describe('extractSeats', () => { activatedUserCount: 12, inactiveUserCount: 0, isSentryUpgrade: false, - isFreePlan: false, }) expect(seats).toEqual(8) }) @@ -552,9 +551,8 @@ describe('shouldRenderCancelLink', () => { // eslint-disable-next-line testing-library/render-result-naming-convention const value = shouldRenderCancelLink({ cancelAtPeriodEnd: false, - plan: { value: Plans.USERS_PR_INAPPY } as PlanData, + plan: { value: Plans.USERS_PR_INAPPY, isFreePlan: false } as PlanData, trialStatus: TrialStatuses.NOT_STARTED, - isFreePlan: false, }) expect(value).toBeTruthy() @@ -565,9 +563,8 @@ describe('shouldRenderCancelLink', () => { // eslint-disable-next-line testing-library/render-result-naming-convention const cancelLinkResult = shouldRenderCancelLink({ cancelAtPeriodEnd: false, - plan: { value: Plans.USERS_BASIC } as PlanData, + plan: { value: Plans.USERS_BASIC, isFreePlan: true } as PlanData, trialStatus: TrialStatuses.NOT_STARTED, - isFreePlan: true, }) expect(cancelLinkResult).toBeFalsy() @@ -579,9 +576,8 @@ describe('shouldRenderCancelLink', () => { // eslint-disable-next-line testing-library/render-result-naming-convention const cancelLinkResult = shouldRenderCancelLink({ cancelAtPeriodEnd: false, - plan: { value: Plans.USERS_TRIAL } as PlanData, + plan: { value: Plans.USERS_TRIAL, isFreePlan: false } as PlanData, trialStatus: TrialStatuses.ONGOING, - isFreePlan: false, }) expect(cancelLinkResult).toBeFalsy() @@ -593,9 +589,8 @@ describe('shouldRenderCancelLink', () => { // eslint-disable-next-line testing-library/render-result-naming-convention const cancelLinkResult = shouldRenderCancelLink({ cancelAtPeriodEnd: true, - plan: { value: Plans.USERS_PR_INAPPY } as PlanData, + plan: { value: Plans.USERS_PR_INAPPY, isFreePlan: false } as PlanData, trialStatus: TrialStatuses.NOT_STARTED, - isFreePlan: false, }) expect(cancelLinkResult).toBeFalsy() From 1cf871d2afe12e141d37e58940afbcafe6201eb6 Mon Sep 17 00:00:00 2001 From: RulaKhaled Date: Wed, 18 Dec 2024 11:37:00 +0200 Subject: [PATCH 11/11] update to plan.isFreePlan --- src/shared/utils/upgradeForm.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/utils/upgradeForm.ts b/src/shared/utils/upgradeForm.ts index e7b54a5766..6880cd2f2f 100644 --- a/src/shared/utils/upgradeForm.ts +++ b/src/shared/utils/upgradeForm.ts @@ -255,7 +255,7 @@ export const getDefaultValuesUpgradeForm = ({ inactiveUserCount, trialStatus, isSentryUpgrade, - isFreePlan: plan?.value === Plans.USERS_BASIC, + isFreePlan: plan?.isFreePlan, }) return {