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, 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(); + }); }); });