From e845704863b6aaa46ce37a1643ab6981a1593171 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Sun, 6 Apr 2025 17:38:24 +0700 Subject: [PATCH 1/2] Expense - Changed amount is not updated till page refresh --- src/libs/actions/IOU.ts | 2 + tests/actions/IOUTest.ts | 118 +++++++++++++++++++++++++ tests/utils/collections/transaction.ts | 1 + 3 files changed, 121 insertions(+) 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..04b07e8c45df 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 updatedTransaction = transactions[`${ONYXKEYS.COLLECTION.TRANSACTION}${fakeTransaction.transactionID}`]; + resolve(updatedTransaction); + }, + }); + }); + 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 updatedTransaction = transactions[`${ONYXKEYS.COLLECTION.TRANSACTION}${fakeTransaction.transactionID}`]; + resolve(updatedTransaction); + }, + }); + }); + 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, }; } From 4c131952c7b38589f05f551e4a3b2a6e9c649dc9 Mon Sep 17 00:00:00 2001 From: nkdengineer Date: Sun, 6 Apr 2025 18:29:07 +0700 Subject: [PATCH 2/2] update name --- tests/actions/IOUTest.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/actions/IOUTest.ts b/tests/actions/IOUTest.ts index 04b07e8c45df..5440d276c820 100644 --- a/tests/actions/IOUTest.ts +++ b/tests/actions/IOUTest.ts @@ -5144,8 +5144,8 @@ describe('actions/IOU', () => { waitForCollectionCallback: true, callback: (transactions) => { Onyx.disconnect(connection); - const updatedTransaction = transactions[`${ONYXKEYS.COLLECTION.TRANSACTION}${fakeTransaction.transactionID}`]; - resolve(updatedTransaction); + const newTransaction = transactions[`${ONYXKEYS.COLLECTION.TRANSACTION}${fakeTransaction.transactionID}`]; + resolve(newTransaction); }, }); }); @@ -5202,8 +5202,8 @@ describe('actions/IOU', () => { waitForCollectionCallback: true, callback: (transactions) => { Onyx.disconnect(connection); - const updatedTransaction = transactions[`${ONYXKEYS.COLLECTION.TRANSACTION}${fakeTransaction.transactionID}`]; - resolve(updatedTransaction); + const newTransaction = transactions[`${ONYXKEYS.COLLECTION.TRANSACTION}${fakeTransaction.transactionID}`]; + resolve(newTransaction); }, }); });