diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index 1842a2755c1e..3ab2a310008c 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -96,6 +96,7 @@ import { getTrackExpenseActionableWhisper, isActionableTrackExpense, isCreatedAction, + isDeletedAction, isMoneyRequestAction, isReportPreviewAction, } from '@libs/ReportActionsUtils'; @@ -9239,7 +9240,12 @@ function getIOUReportActionToApproveOrPay(chatReport: OnyxEntry { }); }); }); + + describe('getIOUReportActionToApproveOrPay', () => { + it('should exclude deleted actions', async () => { + const reportID = '1'; + const policyID = '2'; + const fakePolicy: Policy = { + ...createRandomPolicy(Number(policyID)), + approvalMode: CONST.POLICY.APPROVAL_MODE.BASIC, + type: CONST.POLICY.TYPE.TEAM, + }; + + const fakeReport: Report = { + ...createRandomReport(Number(reportID)), + type: CONST.REPORT.TYPE.EXPENSE, + policyID, + stateNum: CONST.REPORT.STATE_NUM.SUBMITTED, + statusNum: CONST.REPORT.STATUS_NUM.SUBMITTED, + managerID: RORY_ACCOUNT_ID, + chatType: CONST.REPORT.CHAT_TYPE.POLICY_EXPENSE_CHAT, + }; + const fakeTransaction1: Transaction = { + ...createRandomTransaction(0), + reportID, + bank: CONST.EXPENSIFY_CARD.BANK, + status: CONST.TRANSACTION.STATUS.PENDING, + }; + const fakeTransaction2: Transaction = { + ...createRandomTransaction(1), + reportID, + amount: 27, + receipt: { + source: 'test', + state: CONST.IOU.RECEIPT_STATE.SCAN_FAILED, + }, + merchant: CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT, + modifiedMerchant: undefined, + }; + const fakeTransaction3: Transaction = { + ...createRandomTransaction(2), + reportID, + amount: 100, + }; + + await Onyx.set(`${ONYXKEYS.COLLECTION.REPORT}${fakeReport.reportID}`, fakeReport); + await Onyx.set(`${ONYXKEYS.COLLECTION.TRANSACTION}${fakeTransaction1.transactionID}`, fakeTransaction1); + await Onyx.set(`${ONYXKEYS.COLLECTION.TRANSACTION}${fakeTransaction2.transactionID}`, fakeTransaction2); + await Onyx.set(`${ONYXKEYS.COLLECTION.TRANSACTION}${fakeTransaction3.transactionID}`, fakeTransaction3); + await Onyx.set(`${ONYXKEYS.COLLECTION.POLICY}${policyID}`, fakePolicy); + await waitForBatchedUpdates(); + + const deletedReportAction = { + reportActionID: '0', + actionName: CONST.REPORT.ACTIONS.TYPE.REPORT_PREVIEW, + created: '2024-08-08 18:70:44.171', + childReportID: reportID, + }; + + const MOCK_REPORT_ACTIONS: ReportActions = { + [deletedReportAction.reportActionID]: deletedReportAction, + [reportID]: { + reportActionID: reportID, + actionName: CONST.REPORT.ACTIONS.TYPE.REPORT_PREVIEW, + created: '2024-08-08 19:70:44.171', + childReportID: reportID, + message: [ + { + type: 'TEXT', + text: 'Hello world!', + }, + ], + }, + }; + + await Onyx.set(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${fakeReport.reportID}`, MOCK_REPORT_ACTIONS); + + expect(getIOUReportActionToApproveOrPay(fakeReport, undefined)).toMatchObject(MOCK_REPORT_ACTIONS[reportID]); + }); + }); }); diff --git a/tests/unit/DebugUtilsTest.ts b/tests/unit/DebugUtilsTest.ts index a8698d6b2d20..b734111741c7 100644 --- a/tests/unit/DebugUtilsTest.ts +++ b/tests/unit/DebugUtilsTest.ts @@ -1077,6 +1077,12 @@ describe('DebugUtils', () => { reportActionID: '0', actionName: CONST.REPORT.ACTIONS.TYPE.CREATED, created: '2024-08-08 18:70:44.171', + message: [ + { + type: 'TEXT', + text: 'Hello world!', + }, + ], }, // eslint-disable-next-line @typescript-eslint/naming-convention '1': { @@ -1084,6 +1090,12 @@ describe('DebugUtils', () => { actionName: CONST.REPORT.ACTIONS.TYPE.REPORT_PREVIEW, created: '2024-08-08 19:70:44.171', childReportID: '2', + message: [ + { + type: 'TEXT', + text: 'Hello world!', + }, + ], }, }; await Onyx.multiSet({