From 99f72b8da536de77ffe2a37a8f1f1145470cbe35 Mon Sep 17 00:00:00 2001 From: Rayane <77965000+rayane-d@users.noreply.github.com> Date: Wed, 22 Apr 2026 17:41:22 +0100 Subject: [PATCH 1/7] Add support for UPDATE_REQUIRE_COMPANY_CARDS_ENABLED policy changelog --- src/CONST/index.ts | 1 + src/languages/en.ts | 1 + src/libs/ReportActionsUtils.ts | 7 +++++++ .../inbox/report/actionContents/PolicyChangeLogContent.tsx | 2 ++ 4 files changed, 11 insertions(+) diff --git a/src/CONST/index.ts b/src/CONST/index.ts index aaac07e5d51..0d83a168c94 100644 --- a/src/CONST/index.ts +++ b/src/CONST/index.ts @@ -1574,6 +1574,7 @@ const CONST = { UPDATE_ADDRESS: 'POLICYCHANGELOG_UPDATE_ADDRESS', UPDATE_FEATURE_ENABLED: 'POLICYCHANGELOG_UPDATE_FEATURE_ENABLED', UPDATE_IS_ATTENDEE_TRACKING_ENABLED: 'POLICYCHANGELOG_UPDATE_IS_ATTENDEE_TRACKING_ENABLED', + UPDATE_REQUIRE_COMPANY_CARDS_ENABLED: 'POLICYCHANGELOG_UPDATE_REQUIRE_COMPANY_CARDS_ENABLED', UPDATE_DEFAULT_APPROVER: 'POLICYCHANGELOG_UPDATE_DEFAULT_APPROVER', UPDATE_SUBMITS_TO: 'POLICYCHANGELOG_UPDATE_SUBMITS_TO', UPDATE_FORWARDS_TO: 'POLICYCHANGELOG_UPDATE_FORWARDS_TO', diff --git a/src/languages/en.ts b/src/languages/en.ts index 936ae26c37f..05d79d1084c 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -7388,6 +7388,7 @@ const translations = { } }, updatedAttendeeTracking: ({enabled}: {enabled: boolean}) => `${enabled ? 'enabled' : 'disabled'} attendee tracking`, + updatedRequireCompanyCards: ({enabled}: {enabled: boolean}) => `${enabled ? 'enabled' : 'disabled'} the company card purchases requirement`, updatedAutoPayApprovedReports: ({enabled}: {enabled: boolean}) => `${enabled ? 'enabled' : 'disabled'} auto-pay approved reports`, setAutoPayApprovedReportsLimit: ({newLimit}: {newLimit: string}) => `set the auto-pay approved reports threshold to "${newLimit}"`, updatedAutoPayApprovedReportsLimit: ({oldLimit, newLimit}: {oldLimit: string; newLimit: string}) => diff --git a/src/libs/ReportActionsUtils.ts b/src/libs/ReportActionsUtils.ts index 8aaf95c2580..c4229140816 100644 --- a/src/libs/ReportActionsUtils.ts +++ b/src/libs/ReportActionsUtils.ts @@ -3494,6 +3494,12 @@ function getWorkspaceAttendeeTrackingUpdateMessage(translate: LocalizedTranslate return translate('workspaceActions.updatedAttendeeTracking', {enabled: !!enabled}); } +function getRequireCompanyCardsEnabledMessage(translate: LocalizedTranslate, action: ReportAction): string { + const {enabled} = getOriginalMessage(action as ReportAction) ?? {}; + + return translate('workspaceActions.updatedRequireCompanyCards', {enabled: !!enabled}); +} + function getAutoPayApprovedReportsEnabledMessage(translate: LocalizedTranslate, action: ReportAction): string { const {enabled} = getOriginalMessage(action as ReportAction) ?? {}; @@ -4766,6 +4772,7 @@ export { getWorkspaceUpdateFieldMessage, getWorkspaceFeatureEnabledMessage, getWorkspaceAttendeeTrackingUpdateMessage, + getRequireCompanyCardsEnabledMessage, getAutoPayApprovedReportsEnabledMessage, getAutoReimbursementMessage, formatAddressToString, diff --git a/src/pages/inbox/report/actionContents/PolicyChangeLogContent.tsx b/src/pages/inbox/report/actionContents/PolicyChangeLogContent.tsx index 45efcc41634..57aa4001731 100644 --- a/src/pages/inbox/report/actionContents/PolicyChangeLogContent.tsx +++ b/src/pages/inbox/report/actionContents/PolicyChangeLogContent.tsx @@ -35,6 +35,7 @@ import { getRemovedCardFeedMessage, getRemovedConnectionMessage, getRenamedCardFeedMessage, + getRequireCompanyCardsEnabledMessage, getSetAutoJoinMessage, getSubmitsToUpdateMessage, getTagListNameUpdatedMessage, @@ -133,6 +134,7 @@ const POLICY_CHANGE_LOG_RESOLVERS: Record = { [CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_FIELD]: (translate, action) => getWorkspaceUpdateFieldMessage(translate, action), [CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_FEATURE_ENABLED]: (translate, action) => getWorkspaceFeatureEnabledMessage(translate, action), [CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_IS_ATTENDEE_TRACKING_ENABLED]: (translate, action) => getWorkspaceAttendeeTrackingUpdateMessage(translate, action), + [CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_REQUIRE_COMPANY_CARDS_ENABLED]: (translate, action) => getRequireCompanyCardsEnabledMessage(translate, action), [CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_DEFAULT_APPROVER]: (translate, action) => getDefaultApproverUpdateMessage(translate, action), [CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_SUBMITS_TO]: (translate, action) => getSubmitsToUpdateMessage(translate, action), [CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_FORWARDS_TO]: (translate, action) => getForwardsToUpdateMessage(translate, action), From 8e8e12700b54a631a8c10b0370913dfc0e6b08e1 Mon Sep 17 00:00:00 2001 From: Rayane <77965000+rayane-d@users.noreply.github.com> Date: Wed, 22 Apr 2026 17:41:40 +0100 Subject: [PATCH 2/7] add spanish translation from jamesGPT --- src/languages/es.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/languages/es.ts b/src/languages/es.ts index 97f4ac09c34..1d398fa17b3 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -7260,6 +7260,7 @@ ${amount} para ${merchant} - ${date}`, } }, updatedAttendeeTracking: ({enabled}: {enabled: boolean}) => `${enabled ? 'habilitó' : 'deshabilitó'} el seguimiento de asistentes`, + updatedRequireCompanyCards: ({enabled}: {enabled: boolean}) => `${enabled ? 'habilitó' : 'deshabilitó'} el requisito de compras con tarjeta de la empresa`, updatedAutoPayApprovedReports: ({enabled}: {enabled: boolean}) => `${enabled ? 'habilitó' : 'deshabilitó'} el autopago de informes aprobados`, setAutoPayApprovedReportsLimit: ({newLimit}: {newLimit: string}) => `estableció el umbral de autopago de informes aprobados en "${newLimit}"`, updatedAutoPayApprovedReportsLimit: ({oldLimit, newLimit}: {oldLimit: string; newLimit: string}) => From ec7ff330041fce336a88b5ce212e238a0261618c Mon Sep 17 00:00:00 2001 From: Rayane <77965000+rayane-d@users.noreply.github.com> Date: Wed, 22 Apr 2026 17:42:56 +0100 Subject: [PATCH 3/7] Add handling for UPDATE_REQUIRE_COMPANY_CARDS_ENABLED message and translations in report names, context menu copy, sidebar, options list --- src/libs/OptionsListUtils/index.ts | 4 ++++ src/libs/ReportNameUtils.ts | 4 ++++ src/libs/SidebarUtils.ts | 3 +++ src/pages/inbox/report/ContextMenu/ContextMenuActions.tsx | 3 +++ 4 files changed, 14 insertions(+) diff --git a/src/libs/OptionsListUtils/index.ts b/src/libs/OptionsListUtils/index.ts index 597fa41545e..24ebd72ebfb 100644 --- a/src/libs/OptionsListUtils/index.ts +++ b/src/libs/OptionsListUtils/index.ts @@ -70,6 +70,7 @@ import { getReportActionActorAccountID, getReportActionHtml, getReportActionMessageText, + getRequireCompanyCardsEnabledMessage, getRoomAvatarUpdatedMessage, getRoomChangeLogMessage, getSortedReportActions, @@ -881,6 +882,9 @@ function getLastMessageTextForReport({ if (isActionOfType(lastReportAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_AUTO_PAY_APPROVED_REPORTS_ENABLED)) { lastMessageTextFromReport = getAutoPayApprovedReportsEnabledMessage(translate, lastReportAction); } + if (isActionOfType(lastReportAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_REQUIRE_COMPANY_CARDS_ENABLED)) { + lastMessageTextFromReport = getRequireCompanyCardsEnabledMessage(translate, lastReportAction); + } if (isActionOfType(lastReportAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_AUTO_REIMBURSEMENT)) { lastMessageTextFromReport = getAutoReimbursementMessage(translate, lastReportAction); } diff --git a/src/libs/ReportNameUtils.ts b/src/libs/ReportNameUtils.ts index 12e319d9a27..9c22a1b7571 100644 --- a/src/libs/ReportNameUtils.ts +++ b/src/libs/ReportNameUtils.ts @@ -74,6 +74,7 @@ import { getReportActionMessage as getReportActionMessageFromActionsUtils, getReportActionMessageText, getReportActionText, + getRequireCompanyCardsEnabledMessage, getSettlementAccountLockedMessage, getSubmitsToUpdateMessage, getTravelUpdateMessage, @@ -570,6 +571,9 @@ function computeReportNameBasedOnReportAction( if (isActionOfType(parentReportAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_IS_ATTENDEE_TRACKING_ENABLED)) { return getWorkspaceAttendeeTrackingUpdateMessage(translate, parentReportAction); } + if (isActionOfType(parentReportAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_REQUIRE_COMPANY_CARDS_ENABLED)) { + return getRequireCompanyCardsEnabledMessage(translate, parentReportAction); + } if (isActionOfType(parentReportAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_AUTO_PAY_APPROVED_REPORTS_ENABLED)) { return getAutoPayApprovedReportsEnabledMessage(translate, parentReportAction); } diff --git a/src/libs/SidebarUtils.ts b/src/libs/SidebarUtils.ts index 121b82128a2..294fbfbf9a3 100644 --- a/src/libs/SidebarUtils.ts +++ b/src/libs/SidebarUtils.ts @@ -82,6 +82,7 @@ import { getReportAction, getReportActionActorAccountID, getReportActionMessageText, + getRequireCompanyCardsEnabledMessage, getRoomAvatarUpdatedMessage, getSetAutoJoinMessage, getSettlementAccountLockedMessage, @@ -1074,6 +1075,8 @@ function getOptionData({ result.alternateText = getWorkspaceFeatureEnabledMessage(translate, lastAction); } else if (lastAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_IS_ATTENDEE_TRACKING_ENABLED) { result.alternateText = getWorkspaceAttendeeTrackingUpdateMessage(translate, lastAction); + } else if (lastAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_REQUIRE_COMPANY_CARDS_ENABLED) { + result.alternateText = getRequireCompanyCardsEnabledMessage(translate, lastAction); } else if (lastAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_AUTO_PAY_APPROVED_REPORTS_ENABLED) { result.alternateText = getAutoPayApprovedReportsEnabledMessage(translate, lastAction); } else if (lastAction?.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_AUTO_REIMBURSEMENT) { diff --git a/src/pages/inbox/report/ContextMenu/ContextMenuActions.tsx b/src/pages/inbox/report/ContextMenu/ContextMenuActions.tsx index 8484702fa9a..f00d29fdb9f 100644 --- a/src/pages/inbox/report/ContextMenu/ContextMenuActions.tsx +++ b/src/pages/inbox/report/ContextMenu/ContextMenuActions.tsx @@ -81,6 +81,7 @@ import { getReportAction, getReportActionMessageFragments, getReportActionMessageText, + getRequireCompanyCardsEnabledMessage, getRoomAvatarUpdatedMessage, getSetAutoJoinMessage, getSettlementAccountLockedMessage, @@ -933,6 +934,8 @@ const ContextMenuActions: ContextMenuAction[] = [ Clipboard.setString(getForwardsToUpdateMessage(translate, reportAction)); } else if (reportAction.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_AUTO_PAY_APPROVED_REPORTS_ENABLED) { Clipboard.setString(getAutoPayApprovedReportsEnabledMessage(translate, reportAction)); + } else if (reportAction.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_REQUIRE_COMPANY_CARDS_ENABLED) { + Clipboard.setString(getRequireCompanyCardsEnabledMessage(translate, reportAction)); } else if (reportAction.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_AUTO_REIMBURSEMENT) { Clipboard.setString(getAutoReimbursementMessage(translate, reportAction)); } else if (reportAction.actionName === CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_INVOICE_COMPANY_NAME) { From 937cb336b8f4c94108d7b59148957347d5a14043 Mon Sep 17 00:00:00 2001 From: Rayane <77965000+rayane-d@users.noreply.github.com> Date: Wed, 22 Apr 2026 17:43:13 +0100 Subject: [PATCH 4/7] Add unit tests for getRequireCompanyCardsEnabledMessage --- tests/unit/ReportActionsUtilsTest.ts | 33 ++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/tests/unit/ReportActionsUtilsTest.ts b/tests/unit/ReportActionsUtilsTest.ts index 9f35156377a..52fe5e562b5 100644 --- a/tests/unit/ReportActionsUtilsTest.ts +++ b/tests/unit/ReportActionsUtilsTest.ts @@ -36,6 +36,7 @@ import { getRemovedCardFeedMessage, getRenamedCardFeedMessage, getReportActionActorAccountID, + getRequireCompanyCardsEnabledMessage, getSendMoneyFlowAction, getSortedReportActions, getSortedReportActionsForDisplay, @@ -4292,6 +4293,38 @@ describe('ReportActionsUtils', () => { }); }); + describe('getRequireCompanyCardsEnabledMessage', () => { + it('should return enabled message when the company card requirement is enabled', () => { + const action = { + actionName: CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_REQUIRE_COMPANY_CARDS_ENABLED, + reportActionID: '1', + created: '', + originalMessage: { + enabled: true, + }, + message: [], + } as ReportAction; + + const result = getRequireCompanyCardsEnabledMessage(translateLocal, action); + expect(result).toBe('enabled the company card purchases requirement'); + }); + + it('should return disabled message when the company card requirement is disabled', () => { + const action = { + actionName: CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_REQUIRE_COMPANY_CARDS_ENABLED, + reportActionID: '1', + created: '', + originalMessage: { + enabled: false, + }, + message: [], + } as ReportAction; + + const result = getRequireCompanyCardsEnabledMessage(translateLocal, action); + expect(result).toBe('disabled the company card purchases requirement'); + }); + }); + describe('getAutoReimbursementMessage', () => { it('should return set message when setting limit for the first time from zero', () => { const action = { From 594dad7105ad248550382e81f2fd9c7e518a5d92 Mon Sep 17 00:00:00 2001 From: Rayane <77965000+rayane-d@users.noreply.github.com> Date: Wed, 22 Apr 2026 17:43:24 +0100 Subject: [PATCH 5/7] Add unit tests for handling UPDATE_REQUIRE_COMPANY_CARDS_ENABLED action in OptionsListUtils, ReportNameUtils, and SidebarUtils --- tests/unit/OptionsListUtilsTest.tsx | 23 +++++++++ tests/unit/ReportNameUtilsTest.ts | 55 ++++++++++++++++++++++ tests/unit/SidebarUtilsTest.ts | 73 +++++++++++++++++++++++++++++ 3 files changed, 151 insertions(+) diff --git a/tests/unit/OptionsListUtilsTest.tsx b/tests/unit/OptionsListUtilsTest.tsx index 4fc9910761a..697e55d9409 100644 --- a/tests/unit/OptionsListUtilsTest.tsx +++ b/tests/unit/OptionsListUtilsTest.tsx @@ -55,6 +55,7 @@ import { getForeignCurrencyDefaultTaxUpdateMessage, getRemovedCardFeedMessage, getRenamedCardFeedMessage, + getRequireCompanyCardsEnabledMessage, getUnassignedCompanyCardMessage, getUpdatedCardFeedLiabilityMessage, getUpdatedCardFeedStatementPeriodMessage, @@ -4504,6 +4505,28 @@ describe('OptionsListUtils', () => { }); expect(lastMessage).toBe(getForeignCurrencyDefaultTaxUpdateMessage(translateLocal, action)); }); + it('UPDATE_REQUIRE_COMPANY_CARDS_ENABLED action', async () => { + const report: Report = createRandomReport(0, undefined); + const action: ReportAction = { + ...createRandomReportAction(1), + actionName: CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_REQUIRE_COMPANY_CARDS_ENABLED, + message: [{type: 'COMMENT', text: ''}], + originalMessage: {enabled: true}, + }; + await Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${report.reportID}`, { + [action.reportActionID]: action, + }); + const lastMessage = getLastMessageTextForReport({ + translate: translateLocal, + report, + lastActorDetails: null, + policy: undefined, + isReportArchived: false, + + currentUserLogin: CURRENT_USER_EMAIL, + }); + expect(lastMessage).toBe(getRequireCompanyCardsEnabledMessage(translateLocal, action)); + }); it('ADD_CARD_FEED action', async () => { const report: Report = createRandomReport(0, undefined); const action: ReportAction = { diff --git a/tests/unit/ReportNameUtilsTest.ts b/tests/unit/ReportNameUtilsTest.ts index ae03f038ae2..eaf7a4b0501 100644 --- a/tests/unit/ReportNameUtilsTest.ts +++ b/tests/unit/ReportNameUtilsTest.ts @@ -594,6 +594,61 @@ describe('ReportNameUtils', () => { expect(name).toBe('added card feed "Visa Commercial"'); }); + test('UPDATE_REQUIRE_COMPANY_CARDS_ENABLED parent action', () => { + const thread: Report = createWorkspaceThread(150); + const enabledParentAction: ReportAction = { + actionName: CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_REQUIRE_COMPANY_CARDS_ENABLED, + reportActionID: String(thread.parentReportActionID), + message: [], + created: '', + lastModified: '', + actorAccountID: 1, + person: [], + originalMessage: { + enabled: true, + }, + } as unknown as ReportAction; + + const parentId = String(thread.parentReportID); + const actionId = String(thread.parentReportActionID); + const reportActionsCollection: Record = { + [`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${parentId}`]: {[actionId]: enabledParentAction}, + }; + + const enabledName = computeReportName( + thread, + emptyCollections.reports, + emptyCollections.policies, + undefined, + undefined, + participantsPersonalDetails, + reportActionsCollection, + currentUserAccountID, + ); + expect(enabledName).toBe('enabled the company card purchases requirement'); + + const disabledParentAction: ReportAction = { + ...enabledParentAction, + originalMessage: { + enabled: false, + }, + } as unknown as ReportAction; + const disabledReportActionsCollection: Record = { + [`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${parentId}`]: {[actionId]: disabledParentAction}, + }; + const disabledName = computeReportName( + thread, + emptyCollections.reports, + emptyCollections.policies, + undefined, + undefined, + participantsPersonalDetails, + disabledReportActionsCollection, + currentUserAccountID, + ); + expect(disabledName).toBe('disabled the company card purchases requirement'); + }); + test('DELETE_CARD_FEED parent action', () => { const thread: Report = createWorkspaceThread(101); const parentAction: ReportAction = { diff --git a/tests/unit/SidebarUtilsTest.ts b/tests/unit/SidebarUtilsTest.ts index d3e626b7f31..ab1140fa247 100644 --- a/tests/unit/SidebarUtilsTest.ts +++ b/tests/unit/SidebarUtilsTest.ts @@ -1742,6 +1742,79 @@ describe('SidebarUtils', () => { expect(result?.alternateText).toBe('changed the foreign currency default tax rate to "Foreign Tax (10%)" (previously "Foreign Tax (15%)")'); }); + it('returns the correct alternate text for UPDATE_REQUIRE_COMPANY_CARDS_ENABLED action', async () => { + const report: Report = { + ...createRandomReport(4, 'policyAdmins'), + participants: {'18921695': {notificationPreference: 'always'}}, + }; + const enabledAction: ReportAction = { + ...createRandomReportAction(2), + actionName: CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_REQUIRE_COMPANY_CARDS_ENABLED, + originalMessage: {enabled: true}, + }; + const enabledReportActions: ReportActions = {[enabledAction.reportActionID]: enabledAction}; + await act(async () => { + await Onyx.set(`${ONYXKEYS.COLLECTION.REPORT}${report.reportID}`, report); + await Onyx.set(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${report.reportID}`, enabledReportActions); + }); + + const enabledResult = SidebarUtils.getOptionData({ + report, + reportAttributes: undefined, + reportNameValuePairs: {}, + personalDetails: {}, + policy: undefined, + invoiceReceiverPolicy: undefined, + parentReportAction: undefined, + conciergeReportID: '', + oneTransactionThreadReport: undefined, + card: undefined, + translate: translateLocal, + localeCompare, + lastAction: enabledAction, + lastActionReport: undefined, + isReportArchived: undefined, + currentUserAccountID: 0, + currentUserLogin: CURRENT_USER_LOGIN, + reportAttributesDerived: undefined, + }); + + expect(enabledResult?.alternateText).toBe('enabled the company card purchases requirement'); + + const disabledAction: ReportAction = { + ...createRandomReportAction(3), + actionName: CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_REQUIRE_COMPANY_CARDS_ENABLED, + originalMessage: {enabled: false}, + }; + const disabledReportActions: ReportActions = {[disabledAction.reportActionID]: disabledAction}; + await act(async () => { + await Onyx.set(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${report.reportID}`, disabledReportActions); + }); + + const disabledResult = SidebarUtils.getOptionData({ + report, + reportAttributes: undefined, + reportNameValuePairs: {}, + personalDetails: {}, + policy: undefined, + invoiceReceiverPolicy: undefined, + parentReportAction: undefined, + conciergeReportID: '', + oneTransactionThreadReport: undefined, + card: undefined, + translate: translateLocal, + localeCompare, + lastAction: disabledAction, + lastActionReport: undefined, + isReportArchived: undefined, + currentUserAccountID: 0, + currentUserLogin: CURRENT_USER_LOGIN, + reportAttributesDerived: undefined, + }); + + expect(disabledResult?.alternateText).toBe('disabled the company card purchases requirement'); + }); + it('returns the correct alternate text for ADD_CARD_FEED action', async () => { const report: Report = { ...createRandomReport(4, 'policyAdmins'), From 08f4f78231497a967ab653df90769b68fdcf9ada Mon Sep 17 00:00:00 2001 From: Rayane <77965000+rayane-d@users.noreply.github.com> Date: Wed, 22 Apr 2026 19:07:22 +0100 Subject: [PATCH 6/7] move handling of UPDATE_REQUIRE_COMPANY_CARDS_ENABLED action to fix Codecov Report --- src/libs/ReportNameUtils.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/libs/ReportNameUtils.ts b/src/libs/ReportNameUtils.ts index 9c22a1b7571..c0a0974abe0 100644 --- a/src/libs/ReportNameUtils.ts +++ b/src/libs/ReportNameUtils.ts @@ -571,9 +571,6 @@ function computeReportNameBasedOnReportAction( if (isActionOfType(parentReportAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_IS_ATTENDEE_TRACKING_ENABLED)) { return getWorkspaceAttendeeTrackingUpdateMessage(translate, parentReportAction); } - if (isActionOfType(parentReportAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_REQUIRE_COMPANY_CARDS_ENABLED)) { - return getRequireCompanyCardsEnabledMessage(translate, parentReportAction); - } if (isActionOfType(parentReportAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_AUTO_PAY_APPROVED_REPORTS_ENABLED)) { return getAutoPayApprovedReportsEnabledMessage(translate, parentReportAction); } @@ -772,6 +769,10 @@ function computeReportNameBasedOnReportAction( if (isActionOfType(parentReportAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_CARD_FEED_STATEMENT_PERIOD)) { return getUpdatedCardFeedStatementPeriodMessage(translate, parentReportAction); } + if (isActionOfType(parentReportAction, CONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG.UPDATE_REQUIRE_COMPANY_CARDS_ENABLED)) { + return getRequireCompanyCardsEnabledMessage(translate, parentReportAction); + } + if (isDynamicExternalWorkflowSubmitFailedAction(parentReportAction)) { return getDynamicExternalWorkflowSubmitFailedActionMessage(translate, parentReportAction); } From 4bc2de00312d2da37662b0e30082216525193aad Mon Sep 17 00:00:00 2001 From: Rayane <77965000+rayane-d@users.noreply.github.com> Date: Tue, 28 Apr 2026 14:58:25 +0100 Subject: [PATCH 7/7] add translations --- src/languages/de.ts | 1 + src/languages/fr.ts | 1 + src/languages/it.ts | 1 + src/languages/ja.ts | 1 + src/languages/nl.ts | 1 + src/languages/pl.ts | 1 + src/languages/pt-BR.ts | 1 + src/languages/zh-hans.ts | 1 + 8 files changed, 8 insertions(+) diff --git a/src/languages/de.ts b/src/languages/de.ts index 9afba20b758..de1e91131a4 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -7506,6 +7506,7 @@ Fügen Sie weitere Ausgabelimits hinzu, um den Cashflow Ihres Unternehmens zu sc `Kartenfeed-Tag für das Abrechnungsperiodenende von „${feedName}“ geändert${newValue ? ` in „${newValue}“` : ''}${previousValue ? ` (zuvor „${previousValue}“)` : ''}`, addedReportField: (fieldType: string, fieldName?: string, defaultValue?: string) => `${fieldType}-Berichtsfeld „${fieldName}“${defaultValue ? ` mit Standardwert „${defaultValue}“` : ''} hinzugefügt`, + updatedRequireCompanyCards: ({enabled}: {enabled: boolean}) => `${enabled ? 'aktiviert' : 'deaktiviert'} die Anforderung für Firmenkartenkäufe`, }, roomMembersPage: { memberNotFound: 'Mitglied nicht gefunden.', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index ae32a792e0a..847d89e8ac8 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -7528,6 +7528,7 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e `a modifié le jour de fin de période de relevé du flux de carte « ${feedName} »${newValue ? ` à « ${newValue} »` : ''}${previousValue ? ` (précédemment « ${previousValue} »)` : ''}`, addedReportField: (fieldType: string, fieldName?: string, defaultValue?: string) => `a ajouté le champ de note de frais ${fieldType} « ${fieldName} »${defaultValue ? ` avec la valeur par défaut « ${defaultValue} »` : ''}`, + updatedRequireCompanyCards: ({enabled}: {enabled: boolean}) => `${enabled ? 'activé' : 'désactivé'} l’exigence d’achats par carte d’entreprise`, }, roomMembersPage: { memberNotFound: 'Membre introuvable.', diff --git a/src/languages/it.ts b/src/languages/it.ts index ef2d22f3cb4..641af563cf2 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -7494,6 +7494,7 @@ Aggiungi altre regole di spesa per proteggere il flusso di cassa aziendale.`, `ha modificato il giorno di fine periodo dell’estratto conto del flusso carta "${feedName}"${newValue ? ` a "${newValue}"` : ''}${previousValue ? ` (in precedenza "${previousValue}")` : ''}`, addedReportField: (fieldType: string, fieldName?: string, defaultValue?: string) => `aggiunto campo di report ${fieldType} "${fieldName}"${defaultValue ? ` con valore predefinito "${defaultValue}"` : ''}`, + updatedRequireCompanyCards: ({enabled}: {enabled: boolean}) => `${enabled ? 'abilitato' : 'disabilitato'} il requisito per gli acquisti con carta aziendale`, }, roomMembersPage: { memberNotFound: 'Membro non trovato.', diff --git a/src/languages/ja.ts b/src/languages/ja.ts index 373b1521d95..dff99334c3d 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -7404,6 +7404,7 @@ ${reportName} `カード明細フィード「${feedName}」の利用明細期間の終了日を変更しました${newValue ? ` を「${newValue}」に` : ''}${previousValue ? ` (以前の値:「${previousValue}」)` : ''}`, addedReportField: (fieldType: string, fieldName?: string, defaultValue?: string) => `${fieldType}レポートフィールド「${fieldName}」を追加しました${defaultValue ? ` デフォルト値「${defaultValue}」付き` : ''}`, + updatedRequireCompanyCards: ({enabled}: {enabled: boolean}) => `${enabled ? '有効' : '無効'} の法人カード購入要件`, }, roomMembersPage: { memberNotFound: 'メンバーが見つかりません。', diff --git a/src/languages/nl.ts b/src/languages/nl.ts index cdf9739c832..9e1ab8c37c0 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -7470,6 +7470,7 @@ Voeg meer bestedingsregels toe om de kasstroom van het bedrijf te beschermen.`, `heeft de einddag van de afrekenperiode van kaartfeed "${feedName}" gewijzigd${newValue ? ` naar "${newValue}"` : ''}${previousValue ? ` (voorheen "${previousValue}")` : ''}`, addedReportField: (fieldType: string, fieldName?: string, defaultValue?: string) => `heeft ${fieldType}-rapportveld "${fieldName}" toegevoegd${defaultValue ? ` met standaardwaarde "${defaultValue}"` : ''}`, + updatedRequireCompanyCards: ({enabled}: {enabled: boolean}) => `vereiste ${enabled ? 'ingeschakeld' : 'uitgeschakeld'} voor bedrijfskaarttransacties`, }, roomMembersPage: { memberNotFound: 'Lid niet gevonden.', diff --git a/src/languages/pl.ts b/src/languages/pl.ts index 76c129b2ef0..136fdf376d9 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -7460,6 +7460,7 @@ Dodaj więcej zasad wydatków, żeby chronić płynność finansową firmy.`, `zmienił dzień zakończenia okresu rozliczeniowego dla źródła karty „${feedName}”${newValue ? ` na „${newValue}”` : ''}${previousValue ? ` (wcześniej „${previousValue}”)` : ''}`, addedReportField: (fieldType: string, fieldName?: string, defaultValue?: string) => `dodano pole raportu typu ${fieldType} „${fieldName}”${defaultValue ? ` z domyślną wartością „${defaultValue}”` : ''}`, + updatedRequireCompanyCards: ({enabled}: {enabled: boolean}) => `${enabled ? 'włączone' : 'wyłączone'} wymóg dotyczący zakupów kartą służbową`, }, roomMembersPage: { memberNotFound: 'Nie znaleziono członka.', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 0b8302eea91..94c250574ef 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -7461,6 +7461,7 @@ Adicione mais regras de gasto para proteger o fluxo de caixa da empresa.`, `changed card feed "${feedName}" statement period end day${newValue ? ` para "${newValue}"` : ''}${previousValue ? `(antes " ${previousValue}")` : ''}`, addedReportField: (fieldType: string, fieldName?: string, defaultValue?: string) => `adicionou o campo de relatório ${fieldType} "${fieldName}"${defaultValue ? ` com valor padrão "${defaultValue}"` : ''}`, + updatedRequireCompanyCards: ({enabled}: {enabled: boolean}) => `${enabled ? 'ativado' : 'desativado'} o requisito de compras com cartão corporativo`, }, roomMembersPage: { memberNotFound: 'Membro não encontrado.', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index d3e4ebf092d..0e9c399d2a8 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -7274,6 +7274,7 @@ ${reportName} updatedCardFeedStatementPeriod: (feedName: string, newValue?: string, previousValue?: string) => `已更改卡片流水“${feedName}”的账单周期截止日${newValue ? ` 为“${newValue}”` : ''}${previousValue ? ` (先前为“${previousValue}”)` : ''}`, addedReportField: (fieldType: string, fieldName?: string, defaultValue?: string) => `已添加 ${fieldType} 报告字段“${fieldName}”${defaultValue ? ` 默认值为“${defaultValue}”` : ''}`, + updatedRequireCompanyCards: ({enabled}: {enabled: boolean}) => `${enabled ? '已启用' : '已禁用'} 公司商务卡消费要求`, }, roomMembersPage: { memberNotFound: '未找到成员。',