diff --git a/src/libs/actions/IOU.ts b/src/libs/actions/IOU.ts index 911df6aa92b6..58d7cdf9a093 100644 --- a/src/libs/actions/IOU.ts +++ b/src/libs/actions/IOU.ts @@ -3956,6 +3956,7 @@ function getUpdateMoneyRequestParams( onyxMethod: Onyx.METHOD.MERGE, key: `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, value: { + ...transaction, pendingFields: clearedPendingFields, isLoading: false, errorFields, @@ -4191,6 +4192,7 @@ function getUpdateTrackExpenseParams( onyxMethod: Onyx.METHOD.MERGE, key: `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, value: { + ...transaction, pendingFields: clearedPendingFields, isLoading: false, errorFields, diff --git a/tests/actions/IOUTest.ts b/tests/actions/IOUTest.ts index a63403ea602d..5440d276c820 100644 --- a/tests/actions/IOUTest.ts +++ b/tests/actions/IOUTest.ts @@ -5092,4 +5092,122 @@ describe('actions/IOU', () => { expect(calculateDiffAmount(fakeReport, updatedTransaction, fakeTransaction)).toBeNull(); }); }); + + describe('updateMoneyRequestAmountAndCurrency', () => { + it('update the amount of the money request successfully', async () => { + const fakeReport: Report = { + ...createRandomReport(1), + type: CONST.REPORT.TYPE.EXPENSE, + policyID: '1', + stateNum: CONST.REPORT.STATE_NUM.APPROVED, + statusNum: CONST.REPORT.STATUS_NUM.APPROVED, + managerID: RORY_ACCOUNT_ID, + }; + const fakeTransaction: Transaction = { + ...createRandomTransaction(1), + reportID: fakeReport.reportID, + amount: 100, + currency: 'USD', + }; + + await Onyx.set(`${ONYXKEYS.COLLECTION.TRANSACTION}${fakeTransaction.transactionID}`, fakeTransaction); + + mockFetch?.pause?.(); + + updateMoneyRequestAmountAndCurrency({ + transactionID: fakeTransaction.transactionID, + transactionThreadReportID: fakeReport.reportID, + amount: 20000, + currency: CONST.CURRENCY.USD, + taxAmount: 0, + taxCode: '', + policy: { + id: '123', + role: 'user', + type: CONST.POLICY.TYPE.TEAM, + name: '', + owner: '', + outputCurrency: '', + isPolicyExpenseChatEnabled: false, + }, + policyTagList: {}, + policyCategories: {}, + }); + + await waitForBatchedUpdates(); + mockFetch?.succeed?.(); + await mockFetch?.resume?.(); + + const updatedTransaction = await new Promise>((resolve) => { + const connection = Onyx.connect({ + key: ONYXKEYS.COLLECTION.TRANSACTION, + waitForCollectionCallback: true, + callback: (transactions) => { + Onyx.disconnect(connection); + const newTransaction = transactions[`${ONYXKEYS.COLLECTION.TRANSACTION}${fakeTransaction.transactionID}`]; + resolve(newTransaction); + }, + }); + }); + expect(updatedTransaction?.modifiedAmount).toBe(20000); + }); + + it('update the amount of the money request failed', async () => { + const fakeReport: Report = { + ...createRandomReport(1), + type: CONST.REPORT.TYPE.EXPENSE, + policyID: '1', + stateNum: CONST.REPORT.STATE_NUM.APPROVED, + statusNum: CONST.REPORT.STATUS_NUM.APPROVED, + managerID: RORY_ACCOUNT_ID, + }; + const fakeTransaction: Transaction = { + ...createRandomTransaction(1), + reportID: fakeReport.reportID, + amount: 100, + currency: 'USD', + }; + + await Onyx.set(`${ONYXKEYS.COLLECTION.TRANSACTION}${fakeTransaction.transactionID}`, fakeTransaction); + + mockFetch?.pause?.(); + + updateMoneyRequestAmountAndCurrency({ + transactionID: fakeTransaction.transactionID, + transactionThreadReportID: fakeReport.reportID, + amount: 20000, + currency: CONST.CURRENCY.USD, + taxAmount: 0, + taxCode: '', + policy: { + id: '123', + role: 'user', + type: CONST.POLICY.TYPE.TEAM, + name: '', + owner: '', + outputCurrency: '', + isPolicyExpenseChatEnabled: false, + }, + policyTagList: {}, + policyCategories: {}, + }); + + await waitForBatchedUpdates(); + mockFetch?.fail?.(); + await mockFetch?.resume?.(); + + const updatedTransaction = await new Promise>((resolve) => { + const connection = Onyx.connect({ + key: ONYXKEYS.COLLECTION.TRANSACTION, + waitForCollectionCallback: true, + callback: (transactions) => { + Onyx.disconnect(connection); + const newTransaction = transactions[`${ONYXKEYS.COLLECTION.TRANSACTION}${fakeTransaction.transactionID}`]; + resolve(newTransaction); + }, + }); + }); + expect(updatedTransaction?.modifiedAmount).toBe(0); + }); + }); }); diff --git a/tests/utils/collections/transaction.ts b/tests/utils/collections/transaction.ts index 37d1e6ef3d65..f78563066934 100644 --- a/tests/utils/collections/transaction.ts +++ b/tests/utils/collections/transaction.ts @@ -43,5 +43,6 @@ export default function createRandomTransaction(index: number): Transaction { receipt: {}, reimbursable: randBoolean(), hasEReceipt: randBoolean(), + modifiedAmount: 0, }; }