diff --git a/src/components/ReportActionItem/CreatedReportForUnapprovedTransactionsAction.tsx b/src/components/ReportActionItem/CreatedReportForUnapprovedTransactionsAction.tsx index f844b9595671..b4fc71ebea7c 100644 --- a/src/components/ReportActionItem/CreatedReportForUnapprovedTransactionsAction.tsx +++ b/src/components/ReportActionItem/CreatedReportForUnapprovedTransactionsAction.tsx @@ -2,7 +2,7 @@ import React from 'react'; import RenderHTML from '@components/RenderHTML'; import useLocalize from '@hooks/useLocalize'; import useOnyx from '@hooks/useOnyx'; -import {getCreatedReportForUnapprovedTransactionsMessage, getOriginalMessage} from '@libs/ReportActionsUtils'; +import {getCreatedReportForUnapprovedTransactionsMessage, getOriginalMessage, isOriginalReportDeleted} from '@libs/ReportActionsUtils'; import {getReportName} from '@libs/ReportNameUtils'; import ReportActionItemBasicMessage from '@pages/inbox/report/ReportActionItemBasicMessage'; import type CONST from '@src/CONST'; @@ -17,9 +17,9 @@ type CreatedReportForUnapprovedTransactionsActionProps = { function CreatedReportForUnapprovedTransactionsAction({action}: CreatedReportForUnapprovedTransactionsActionProps) { const {originalID} = getOriginalMessage(action) ?? {}; const {translate} = useLocalize(); - const [report] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${originalID}`); - const reportName = getReportName(report); - const htmlContent = `${getCreatedReportForUnapprovedTransactionsMessage(originalID, reportName, translate)}`; + const [originalReport] = useOnyx(`${ONYXKEYS.COLLECTION.REPORT}${originalID}`); + const reportName = getReportName(originalReport); + const htmlContent = `${getCreatedReportForUnapprovedTransactionsMessage(originalID, reportName, isOriginalReportDeleted(action, originalReport), translate)}`; return ( diff --git a/src/languages/de.ts b/src/languages/de.ts index e9e25d8e75c7..bcd5813d216e 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -908,8 +908,10 @@ const translations: TranslationDeepObject = { asCopilot: 'als Copilot für', harvestCreatedExpenseReport: (reportUrl: string, reportName: string) => `hat diesen Bericht erstellt, um alle Ausgaben aus ${reportName} aufzunehmen, die nicht mit der von dir gewählten Häufigkeit eingereicht werden konnten`, - createdReportForUnapprovedTransactions: ({reportUrl, reportName}: CreatedReportForUnapprovedTransactionsParams) => - `erstellte diesen Bericht für alle zurückgehaltenen Ausgaben aus ${reportName}`, + createdReportForUnapprovedTransactions: ({reportUrl, reportName, reportID, isReportDeleted}: CreatedReportForUnapprovedTransactionsParams) => + isReportDeleted + ? `hat diesen Bericht für alle zurückgehaltenen Ausgaben aus dem gelöschten Bericht #${reportID} erstellt` + : `hat diesen Bericht für alle zurückgehaltenen Ausgaben aus ${reportName} erstellt`, }, mentionSuggestions: { hereAlternateText: 'Alle in dieser Unterhaltung benachrichtigen', diff --git a/src/languages/en.ts b/src/languages/en.ts index 56f7b42edf8b..c1c0f257a475 100644 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -921,8 +921,10 @@ const translations = { asCopilot: 'as copilot for', harvestCreatedExpenseReport: (reportUrl: string, reportName: string) => `created this report to hold all expenses from ${reportName} that couldn't be submitted on your chosen frequency`, - createdReportForUnapprovedTransactions: ({reportUrl, reportName}: CreatedReportForUnapprovedTransactionsParams) => - `created this report for any held expenses from ${reportName}`, + createdReportForUnapprovedTransactions: ({reportUrl, reportName, reportID, isReportDeleted}: CreatedReportForUnapprovedTransactionsParams) => + isReportDeleted + ? `created this report for any held expenses from deleted report #${reportID}` + : `created this report for any held expenses from ${reportName}`, }, mentionSuggestions: { hereAlternateText: 'Notify everyone in this conversation', diff --git a/src/languages/es.ts b/src/languages/es.ts index 6edcdf440cf7..ef174f96dd83 100644 --- a/src/languages/es.ts +++ b/src/languages/es.ts @@ -754,8 +754,10 @@ const translations: TranslationDeepObject = { asCopilot: 'como copiloto de', harvestCreatedExpenseReport: (reportUrl, reportName) => `creó este informe para contener todos los gastos de ${reportName} que no se pudieron enviar con la frecuencia que elegiste`, - createdReportForUnapprovedTransactions: ({reportUrl, reportName}: CreatedReportForUnapprovedTransactionsParams) => - `creó este informe para cualquier gasto retenido de ${reportName}`, + createdReportForUnapprovedTransactions: ({reportUrl, reportName, reportID, isReportDeleted}: CreatedReportForUnapprovedTransactionsParams) => + isReportDeleted + ? `creó este informe para cualquier gasto retenido del informe eliminado #${reportID}` + : `creó este informe para cualquier gasto retenido de ${reportName}`, }, mentionSuggestions: { hereAlternateText: 'Notificar a todos en esta conversación', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index fa75cf032582..fdde6d7e4de1 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -911,8 +911,10 @@ const translations: TranslationDeepObject = { asCopilot: 'en tant que copilote pour', harvestCreatedExpenseReport: (reportUrl: string, reportName: string) => `a créé cette note de frais pour regrouper toutes les dépenses de ${reportName} qui n'ont pas pu être soumises à la fréquence que vous avez choisie`, - createdReportForUnapprovedTransactions: ({reportUrl, reportName}: CreatedReportForUnapprovedTransactionsParams) => - `a créé cette note de frais pour toutes les dépenses en attente de ${reportName}`, + createdReportForUnapprovedTransactions: ({reportUrl, reportName, reportID, isReportDeleted}: CreatedReportForUnapprovedTransactionsParams) => + isReportDeleted + ? `a créé cette note de frais pour toutes les dépenses retenues de la note de frais supprimée n°${reportID}` + : `a créé cette note de frais pour toutes les dépenses retenues provenant de ${reportName}`, }, mentionSuggestions: { hereAlternateText: 'Notifier tout le monde dans cette conversation', diff --git a/src/languages/it.ts b/src/languages/it.ts index 9e78b24f5005..1565dd0dc34b 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -908,8 +908,10 @@ const translations: TranslationDeepObject = { asCopilot: 'come copilota per', harvestCreatedExpenseReport: (reportUrl: string, reportName: string) => `ha creato questo report per raccogliere tutte le spese da ${reportName} che non potevano essere inviate con la frequenza scelta`, - createdReportForUnapprovedTransactions: ({reportUrl, reportName}: CreatedReportForUnapprovedTransactionsParams) => - `ha creato questo report per tutte le spese in sospeso da ${reportName}`, + createdReportForUnapprovedTransactions: ({reportUrl, reportName, reportID, isReportDeleted}: CreatedReportForUnapprovedTransactionsParams) => + isReportDeleted + ? `ha creato questo rendiconto per tutte le spese in sospeso dal rendiconto eliminato n. ${reportID}` + : `ha creato questo report per tutte le spese in sospeso da ${reportName}`, }, mentionSuggestions: { hereAlternateText: 'Notifica tutti in questa conversazione', diff --git a/src/languages/ja.ts b/src/languages/ja.ts index f7f87c719fe4..d00b78bd95a6 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -903,8 +903,10 @@ const translations: TranslationDeepObject = { asCopilot: '共同操縦者として', harvestCreatedExpenseReport: (reportUrl: string, reportName: string) => `選択した頻度で提出できなかった、${reportName} のすべての経費を保持するためにこのレポートを作成しました`, - createdReportForUnapprovedTransactions: ({reportUrl, reportName}: CreatedReportForUnapprovedTransactionsParams) => - `${reportName} から保留中の経費を対象としてこのレポートを作成しました`, + createdReportForUnapprovedTransactions: ({reportUrl, reportName, reportID, isReportDeleted}: CreatedReportForUnapprovedTransactionsParams) => + isReportDeleted + ? `削除されたレポート #${reportID} に保留されていた経費のためにこのレポートを作成しました` + : `${reportName} の保留中経費すべてに対してこのレポートを作成しました`, }, mentionSuggestions: { hereAlternateText: 'この会話の全員に通知', diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 7de585afa893..533f340ceb28 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -906,8 +906,10 @@ const translations: TranslationDeepObject = { asCopilot: 'als copiloot voor', harvestCreatedExpenseReport: (reportUrl: string, reportName: string) => `heeft dit rapport gemaakt om alle uitgaven van ${reportName} te bewaren die niet konden worden ingediend op de door jou gekozen frequentie`, - createdReportForUnapprovedTransactions: ({reportUrl, reportName}: CreatedReportForUnapprovedTransactionsParams) => - `heeft dit rapport gemaakt voor uitgestelde uitgaven van ${reportName}`, + createdReportForUnapprovedTransactions: ({reportUrl, reportName, reportID, isReportDeleted}: CreatedReportForUnapprovedTransactionsParams) => + isReportDeleted + ? `heeft dit rapport gemaakt voor alle vastgehouden uitgaven uit verwijderd rapport nr. ${reportID}` + : `heeft dit rapport gemaakt voor alle vastgehouden uitgaven van ${reportName}`, }, mentionSuggestions: { hereAlternateText: 'Laat iedereen in dit gesprek een melding krijgen', diff --git a/src/languages/params.ts b/src/languages/params.ts index 8a5112bbb527..129ccb4848f8 100644 --- a/src/languages/params.ts +++ b/src/languages/params.ts @@ -64,6 +64,8 @@ type ReportArchiveReasonsInvoiceReceiverPolicyDeletedParams = { type CreatedReportForUnapprovedTransactionsParams = { reportUrl: string; reportName: string; + reportID: string; + isReportDeleted: boolean; }; type WorkspacesListRouteParams = { diff --git a/src/languages/pl.ts b/src/languages/pl.ts index af0b92efdd98..6858dcb9e91c 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -907,8 +907,10 @@ const translations: TranslationDeepObject = { asCopilot: 'jako drugi pilot dla', harvestCreatedExpenseReport: (reportUrl: string, reportName: string) => `utworzył(-a) ten raport, aby zawierał wszystkie wydatki z ${reportName}, których nie można było złożyć z wybraną przez Ciebie częstotliwością`, - createdReportForUnapprovedTransactions: ({reportUrl, reportName}: CreatedReportForUnapprovedTransactionsParams) => - `utworzył/-a ten raport dla wszystkich wstrzymanych wydatków z ${reportName}`, + createdReportForUnapprovedTransactions: ({reportUrl, reportName, reportID, isReportDeleted}: CreatedReportForUnapprovedTransactionsParams) => + isReportDeleted + ? `utworzono ten raport dla wszystkich wstrzymanych wydatków z usuniętego raportu nr ${reportID}` + : `utworzył(-a) ten raport dla wszystkich wstrzymanych wydatków z ${reportName}`, }, mentionSuggestions: { hereAlternateText: 'Powiadom wszystkich w tej konwersacji', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index f6b5054dd567..071886ec29d3 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -906,8 +906,10 @@ const translations: TranslationDeepObject = { asCopilot: 'como copiloto de', harvestCreatedExpenseReport: (reportUrl: string, reportName: string) => `criou este relatório para manter todas as despesas de ${reportName} que não puderam ser enviadas na frequência escolhida por você`, - createdReportForUnapprovedTransactions: ({reportUrl, reportName}: CreatedReportForUnapprovedTransactionsParams) => - `criou este relatório para quaisquer despesas em espera de ${reportName}`, + createdReportForUnapprovedTransactions: ({reportUrl, reportName, reportID, isReportDeleted}: CreatedReportForUnapprovedTransactionsParams) => + isReportDeleted + ? `criou este relatório para quaisquer despesas retidas do relatório excluído nº ${reportID}` + : `criou este relatório para quaisquer despesas retidas de ${reportName}`, }, mentionSuggestions: { hereAlternateText: 'Notificar todas as pessoas nesta conversa', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index 479231ccb2d7..0f7345748af5 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -893,8 +893,8 @@ const translations: TranslationDeepObject = { reportAction: { asCopilot: '作为副驾驶,用于', harvestCreatedExpenseReport: (reportUrl: string, reportName: string) => `创建了此报销单,用于保存所有来自 ${reportName} 且无法按照你选择的频率提交的费用`, - createdReportForUnapprovedTransactions: ({reportUrl, reportName}: CreatedReportForUnapprovedTransactionsParams) => - `从${reportName}创建了此报表,用于查看任何被暂扣的报销费用`, + createdReportForUnapprovedTransactions: ({reportUrl, reportName, reportID, isReportDeleted}: CreatedReportForUnapprovedTransactionsParams) => + isReportDeleted ? `为已删除报销单 #${reportID} 中的所有暂挂报销创建了此报销单` : `为从${reportName}中被暂挂的任何报销创建了此报表`, }, mentionSuggestions: { hereAlternateText: '通知此会话中的所有人', diff --git a/src/libs/DebugUtils.ts b/src/libs/DebugUtils.ts index 4f33ff60b8b8..770f148035f6 100644 --- a/src/libs/DebugUtils.ts +++ b/src/libs/DebugUtils.ts @@ -718,6 +718,7 @@ function validateReportActionDraftProperty(key: keyof ReportAction, value: strin case 'isAttachmentWithText': case 'isNewestReportAction': case 'isOptimisticAction': + case 'isOriginalReportDeleted': return validateBoolean(value); case 'created': case 'lastModified': @@ -769,6 +770,7 @@ function validateReportActionDraftProperty(key: keyof ReportAction, value: strin childReportNotificationPreference: CONST.RED_BRICK_ROAD_PENDING_ACTION, isNewestReportAction: CONST.RED_BRICK_ROAD_PENDING_ACTION, isOptimisticAction: CONST.RED_BRICK_ROAD_PENDING_ACTION, + isOriginalReportDeleted: CONST.RED_BRICK_ROAD_PENDING_ACTION, adminAccountID: CONST.RED_BRICK_ROAD_PENDING_ACTION, whisperedToAccountIDs: CONST.RED_BRICK_ROAD_PENDING_ACTION, reportActionTimestamp: CONST.RED_BRICK_ROAD_PENDING_ACTION, @@ -1279,6 +1281,7 @@ function validateTransactionDraftProperty(key: keyof Transaction, value: string) childReportNotificationPreference: CONST.REPORT.NOTIFICATION_PREFERENCE, isNewestReportAction: 'boolean', isOptimisticAction: 'boolean', + isOriginalReportDeleted: 'boolean', adminAccountID: 'number', whisperedToAccountIDs: 'array', reportActionTimestamp: 'string', diff --git a/src/libs/ReportActionsUtils.ts b/src/libs/ReportActionsUtils.ts index 2e95d6b9e7ad..cf1a309cc0e4 100644 --- a/src/libs/ReportActionsUtils.ts +++ b/src/libs/ReportActionsUtils.ts @@ -4109,9 +4109,20 @@ function getHarvestCreatedExpenseReportMessage(reportID: string | undefined, rep return translate('reportAction.harvestCreatedExpenseReport', reportUrl, reportName); } -function getCreatedReportForUnapprovedTransactionsMessage(reportID: string | undefined, reportName: string, translate: LocalizedTranslate): string { +/** + * Check if the original report referenced by a report action is deleted. + */ +function isOriginalReportDeleted(action: OnyxEntry, originalReport: OnyxEntry): boolean { + // isOriginalReportDeleted is set to true when the original report is deleted from the backend. We can fall back to check if the report is optimistically deleted on the frontend side. + return !!action?.isOriginalReportDeleted || originalReport?.pendingFields?.preview === CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE; +} + +function getCreatedReportForUnapprovedTransactionsMessage(reportID: string | undefined, reportName: string, isReportDeleted: boolean, translate: LocalizedTranslate): string { + if (reportID === undefined) { + return ''; + } const reportUrl = getReportURLForCurrentContext(reportID); - return translate('reportAction.createdReportForUnapprovedTransactions', {reportUrl, reportName}); + return translate('reportAction.createdReportForUnapprovedTransactions', {reportUrl, reportName, reportID, isReportDeleted}); } function getDynamicExternalWorkflowRoutedMessage( @@ -4605,6 +4616,7 @@ export { getWorkspaceCategoriesUpdatedMessage, getHarvestCreatedExpenseReportMessage, getCreatedReportForUnapprovedTransactionsMessage, + isOriginalReportDeleted, isSystemUserMentioned, withDEWRoutedActionsArray, withDEWRoutedActionsObject, diff --git a/src/libs/ReportNameUtils.ts b/src/libs/ReportNameUtils.ts index 11ea85eaac40..04f1da5c9f29 100644 --- a/src/libs/ReportNameUtils.ts +++ b/src/libs/ReportNameUtils.ts @@ -91,6 +91,7 @@ import { isMoneyRequestAction, isMovedAction, isOldDotReportAction, + isOriginalReportDeleted, isRenamedAction, isReportActionAttachment, isTagModificationAction, @@ -787,7 +788,7 @@ function computeReportName( const originalReport = reports?.[`${ONYXKEYS.COLLECTION.REPORT}${originalID}`]; const reportName = computeReportName(originalReport, reports, policies, transactions, allReportNameValuePairs, personalDetailsList, reportActions, currentUserAccountID); // eslint-disable-next-line @typescript-eslint/no-deprecated - return getCreatedReportForUnapprovedTransactionsMessage(originalID, reportName, translateLocal); + return getCreatedReportForUnapprovedTransactionsMessage(originalID, reportName, isOriginalReportDeleted(parentReportAction, originalReport), translateLocal); } if (isTaskReport(report)) { diff --git a/src/libs/ReportUtils.ts b/src/libs/ReportUtils.ts index 069be054a931..f8e995ebf273 100644 --- a/src/libs/ReportUtils.ts +++ b/src/libs/ReportUtils.ts @@ -5759,7 +5759,7 @@ function getReportName(reportNameInformation: GetReportNameParams): string { // eslint-disable-next-line @typescript-eslint/no-deprecated -- temporarily disabling rule for deprecated functions out of issue scope const reportName = getReportName({report: originalReport}); // eslint-disable-next-line @typescript-eslint/no-deprecated -- temporarily disabling rule for deprecated functions out of issue scope - return getCreatedReportForUnapprovedTransactionsMessage(originalID, reportName, translateLocal); + return getCreatedReportForUnapprovedTransactionsMessage(originalID, reportName, !!parentReportAction.isOriginalReportDeleted, translateLocal); } if (isTaskReport(report)) { diff --git a/src/pages/inbox/report/ContextMenu/ContextMenuActions.tsx b/src/pages/inbox/report/ContextMenu/ContextMenuActions.tsx index 92b9cdc3770f..97351a4cc479 100644 --- a/src/pages/inbox/report/ContextMenu/ContextMenuActions.tsx +++ b/src/pages/inbox/report/ContextMenu/ContextMenuActions.tsx @@ -131,6 +131,7 @@ import { isMoneyRequestAction, isMovedAction, isOldDotReportAction, + isOriginalReportDeleted, isReimbursementDeQueuedOrCanceledAction, isReimbursementQueuedAction, isRenamedAction, @@ -1061,8 +1062,14 @@ const ContextMenuActions: ContextMenuAction[] = [ setClipboardMessage(displayMessage); } else if (isActionOfType(reportAction, CONST.REPORT.ACTIONS.TYPE.CREATED_REPORT_FOR_UNAPPROVED_TRANSACTIONS)) { const {originalID} = getOriginalMessage(reportAction) ?? {}; - const reportName = getReportName(getReportOrDraftReport(originalID)); - const displayMessage = getCreatedReportForUnapprovedTransactionsMessage(originalID, reportName, translate); + const originalReportOfUnapprovedTransaction = getReportOrDraftReport(originalID); + const reportName = getReportName(originalReportOfUnapprovedTransaction); + const displayMessage = getCreatedReportForUnapprovedTransactionsMessage( + originalID, + reportName, + isOriginalReportDeleted(reportAction, originalReportOfUnapprovedTransaction), + translate, + ); setClipboardMessage(displayMessage); } else if (content) { setClipboardMessage( diff --git a/src/pages/inbox/report/ReportActionsListItemRenderer.tsx b/src/pages/inbox/report/ReportActionsListItemRenderer.tsx index bb24d0c5d504..0cd87191d5ab 100644 --- a/src/pages/inbox/report/ReportActionsListItemRenderer.tsx +++ b/src/pages/inbox/report/ReportActionsListItemRenderer.tsx @@ -153,6 +153,7 @@ function ReportActionsListItemRenderer({ delegateAccountID: reportAction.delegateAccountID, previousMessage: reportAction.previousMessage, isAttachmentWithText: reportAction.isAttachmentWithText, + isOriginalReportDeleted: reportAction.isOriginalReportDeleted, childStateNum: reportAction.childStateNum, childStatusNum: reportAction.childStatusNum, childReportName: reportAction.childReportName, @@ -182,6 +183,7 @@ function ReportActionsListItemRenderer({ reportAction.delegateAccountID, reportAction.previousMessage, reportAction.isAttachmentWithText, + reportAction.isOriginalReportDeleted, reportAction.childStateNum, reportAction.childStatusNum, reportAction.childReportName, diff --git a/src/types/onyx/ReportAction.ts b/src/types/onyx/ReportAction.ts index 3c9061bc666c..95ab730457b7 100644 --- a/src/types/onyx/ReportAction.ts +++ b/src/types/onyx/ReportAction.ts @@ -265,6 +265,9 @@ type ReportActionBase = OnyxCommon.OnyxValueWithOfflineFeedback<{ /** Flag for checking if data is from optimistic data */ isOptimisticAction?: boolean; + /** Whether the original report related to this action was deleted */ + isOriginalReportDeleted?: boolean; + /** The admins's ID */ adminAccountID?: number; diff --git a/tests/unit/ReportActionsUtilsTest.ts b/tests/unit/ReportActionsUtilsTest.ts index 5011493567be..8d742337016c 100644 --- a/tests/unit/ReportActionsUtilsTest.ts +++ b/tests/unit/ReportActionsUtilsTest.ts @@ -1759,19 +1759,36 @@ describe('ReportActionsUtils', () => { }); describe('getCreatedReportForUnapprovedTransactionsMessage', () => { - it('should return the correct message with a valid report ID and report name', () => { + it('should return the correct message with a valid report ID and report name when report is not deleted', () => { const reportID = '67890'; const reportName = 'Original Report'; + const isReportDeleted = false; const reportUrl = getReportURLForCurrentContext(reportID); const expectedMessage = translateLocal('reportAction.createdReportForUnapprovedTransactions', { reportUrl, reportName, + reportID, + isReportDeleted, }); - const result = getCreatedReportForUnapprovedTransactionsMessage(reportID, reportName, translateLocal); + const result = getCreatedReportForUnapprovedTransactionsMessage(reportID, reportName, isReportDeleted, translateLocal); expect(result).toBe(expectedMessage); }); + + it('should return a message with plain reportID when report is deleted', () => { + const isReportDeleted = true; + const result = getCreatedReportForUnapprovedTransactionsMessage('123456', 'Some Name', isReportDeleted, translateLocal); + + expect(result).toBe('created this report for any held expenses from deleted report #123456'); + }); + + it('should handle undefined reportID and report is deleted', () => { + const isReportDeleted = true; + const result = getCreatedReportForUnapprovedTransactionsMessage(undefined, 'Some Name', isReportDeleted, translateLocal); + + expect(result).toBe(''); + }); }); describe('isDynamicExternalWorkflowSubmitFailedAction', () => { @@ -3784,4 +3801,53 @@ describe('ReportActionsUtils', () => { expect(withoutWrite.lastVisibleAction?.reportActionID).toBe(normalAction.reportActionID); }); }); + + describe('isOriginalReportDeleted', () => { + it('should return true when action.isOriginalReportDeleted is true', () => { + const action = { + ...createRandomReportAction(1), + isOriginalReportDeleted: true, + }; + const originalReport = createRandomReport(1, undefined); + + expect(ReportActionsUtils.isOriginalReportDeleted(action, originalReport)).toBe(true); + }); + + it('should return true when originalReport.pendingFields.preview is DELETE', () => { + const action = createRandomReportAction(1); + const originalReport = { + ...createRandomReport(1, undefined), + pendingFields: { + preview: CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE, + }, + }; + + expect(ReportActionsUtils.isOriginalReportDeleted(action, originalReport)).toBe(true); + }); + + it('should return false when both conditions are not met', () => { + const action = { + ...createRandomReportAction(1), + isOriginalReportDeleted: false, + }; + const originalReport = createRandomReport(1, undefined); + + expect(ReportActionsUtils.isOriginalReportDeleted(action, originalReport)).toBe(false); + }); + + it('should return false when originalReport.pendingFields.preview is not DELETE', () => { + const action = { + ...createRandomReportAction(1), + isOriginalReportDeleted: false, + }; + const originalReport = { + ...createRandomReport(1, undefined), + pendingFields: { + preview: CONST.RED_BRICK_ROAD_PENDING_ACTION.UPDATE, + }, + }; + + expect(ReportActionsUtils.isOriginalReportDeleted(action, originalReport)).toBe(false); + }); + }); });