From 878e0530c1edb70f6aefb969083af70a731b279d Mon Sep 17 00:00:00 2001 From: allgandaf Date: Mon, 6 Jul 2026 16:16:12 +0530 Subject: [PATCH 1/2] Guard payment onboarding against a choice with no onboarding message --- src/libs/actions/IOU/PayMoneyRequest.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/libs/actions/IOU/PayMoneyRequest.ts b/src/libs/actions/IOU/PayMoneyRequest.ts index 8b5752eff080..93bca67d72d4 100644 --- a/src/libs/actions/IOU/PayMoneyRequest.ts +++ b/src/libs/actions/IOU/PayMoneyRequest.ts @@ -773,10 +773,15 @@ function completePaymentOnboarding( onboardingPurpose = CONST.ONBOARDING_CHOICES.CHAT_SPLIT; } const {onboardingMessages} = getOnboardingMessages(); + // choice can hold a backend value with no onboarding message (e.g. classicAdmin for Classic-invited admins), so skip instead of crashing on the undefined lookup below. + const onboardingMessage = onboardingMessages[onboardingPurpose]; + if (!onboardingMessage) { + return; + } completeOnboarding({ engagementChoice: onboardingPurpose, - onboardingMessage: onboardingMessages[onboardingPurpose], + onboardingMessage, firstName: personalDetails?.firstName, lastName: personalDetails?.lastName, adminsChatReportID, From ccf06b7924ad28d618a59e12fbaf5f102f488bf7 Mon Sep 17 00:00:00 2001 From: allgandaf Date: Mon, 6 Jul 2026 16:16:13 +0530 Subject: [PATCH 2/2] Test completePaymentOnboarding skips an unknown onboarding choice --- tests/actions/IOUTest/PayMoneyRequestTest.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/actions/IOUTest/PayMoneyRequestTest.ts b/tests/actions/IOUTest/PayMoneyRequestTest.ts index 4db333dd6bc2..5da07aaf6e7d 100644 --- a/tests/actions/IOUTest/PayMoneyRequestTest.ts +++ b/tests/actions/IOUTest/PayMoneyRequestTest.ts @@ -2018,5 +2018,17 @@ describe('actions/IOU/PayMoneyRequest', () => { }), ); }); + + it('does not call completeOnboarding when the choice has no onboarding message (e.g. classicAdmin for Classic-invited admins)', () => { + const introSelected: IntroSelected = { + // @ts-expect-error classicAdmin is a backend-only choice value with no App onboarding message, intentionally outside the OnboardingPurpose union + choice: 'classicAdmin', + inviteType: CONST.ONBOARDING_INVITE_TYPES.WORKSPACE, + isInviteOnboardingComplete: false, + }; + + expect(() => completePaymentOnboarding(CONST.PAYMENT_SELECTED.PBA, introSelected, false, [CONST.BETAS.ALL], CARLOS_ACCOUNT_ID)).not.toThrow(); + expect(completeOnboardingSpy).not.toHaveBeenCalled(); + }); }); });