From ef1143ed732c154ee1871a1545bff1129283ce29 Mon Sep 17 00:00:00 2001 From: daledah Date: Thu, 3 Apr 2025 17:57:04 +0700 Subject: [PATCH 1/2] test: add test case for initMoneyRequest --- tests/actions/IOUTest.ts | 130 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) diff --git a/tests/actions/IOUTest.ts b/tests/actions/IOUTest.ts index a63403ea602d..6679d16bbdf6 100644 --- a/tests/actions/IOUTest.ts +++ b/tests/actions/IOUTest.ts @@ -10,6 +10,7 @@ import { canIOUBePaid, canUnapproveIOU, deleteMoneyRequest, + initMoneyRequest, payMoneyRequest, putOnHold, requestMoney, @@ -68,6 +69,7 @@ import createRandomPolicy, {createCategoryTaxExpenseRules} from '../utils/collec import createRandomPolicyCategories from '../utils/collections/policyCategory'; import createRandomReport from '../utils/collections/reports'; import createRandomTransaction from '../utils/collections/transaction'; +import getOnyxValue from '../utils/getOnyxValue'; import PusherHelper from '../utils/PusherHelper'; import {getGlobalFetchMock, getOnyxData, setPersonalDetails, signInWithTestUser} from '../utils/TestHelper'; import type {MockFetch} from '../utils/TestHelper'; @@ -5092,4 +5094,132 @@ describe('actions/IOU', () => { expect(calculateDiffAmount(fakeReport, updatedTransaction, fakeTransaction)).toBeNull(); }); }); + + describe('initMoneyRequest', () => { + const fakeReport: Report = { + ...createRandomReport(0), + type: CONST.REPORT.TYPE.EXPENSE, + policyID: '1', + managerID: CARLOS_ACCOUNT_ID, + }; + const fakePolicy: Policy = { + ...createRandomPolicy(1), + type: 'team', + outputCurrency: 'USD', + }; + const fakePersonalPolicy: Policy = { + ...createRandomPolicy(2), + type: 'personal', + outputCurrency: 'NZD', + }; + beforeEach(async () => { + await Onyx.set(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}1`, null); + await Onyx.merge(`${ONYXKEYS.CURRENT_DATE}`, '2025-04-01'); + await Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT}0`, fakeReport); + await Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY}1`, fakePolicy); + await Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY}2`, fakePersonalPolicy); + return waitForBatchedUpdates(); + }); + + it('should merge transaction draft onyx value', () => { + return waitForBatchedUpdates() + .then(() => { + return initMoneyRequest('0', fakePolicy, true, undefined, 'manual'); + }) + .then(async () => { + expect(await getOnyxValue(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}1`)).toStrictEqual({ + amount: 0, + comment: { + attendees: [ + { + email: 'rory@expensifail.com', + login: 'rory@expensifail.com', + accountID: 3, + text: 'rory@expensifail.com', + selected: true, + reportID: '0', + avatarUrl: '', + displayName: '', + }, + ], + }, + created: '2025-04-01', + currency: 'USD', + iouRequestType: 'manual', + reportID: '0', + transactionID: '1', + isFromGlobalCreate: true, + merchant: '(none)', + splitPayerAccountIDs: [3], + }); + }); + }); + + it('should modify transaction draft when currentIouRequestType is different', () => { + return waitForBatchedUpdates() + .then(() => { + return initMoneyRequest('0', fakePolicy, true, 'manual', 'scan'); + }) + .then(async () => { + expect(await getOnyxValue(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}1`)).toStrictEqual({ + amount: 0, + comment: { + attendees: [ + { + email: 'rory@expensifail.com', + login: 'rory@expensifail.com', + accountID: 3, + text: 'rory@expensifail.com', + selected: true, + reportID: '0', + avatarUrl: '', + displayName: '', + }, + ], + }, + created: '2025-04-01', + currency: 'USD', + iouRequestType: 'scan', + reportID: '0', + transactionID: '1', + isFromGlobalCreate: true, + merchant: '(none)', + splitPayerAccountIDs: [3], + }); + }); + }); + it('should return personal currency when policy is missing', () => { + return waitForBatchedUpdates() + .then(() => { + return initMoneyRequest('0', undefined, true, undefined, 'manual'); + }) + .then(async () => { + expect(await getOnyxValue(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}1`)).toStrictEqual({ + amount: 0, + comment: { + attendees: [ + { + email: 'rory@expensifail.com', + login: 'rory@expensifail.com', + accountID: 3, + text: 'rory@expensifail.com', + selected: true, + reportID: '0', + avatarUrl: '', + displayName: '', + }, + ], + }, + created: '2025-04-01', + currency: 'NZD', + iouRequestType: 'manual', + reportID: '0', + transactionID: '1', + isFromGlobalCreate: true, + merchant: '(none)', + splitPayerAccountIDs: [3], + }); + }); + }); + }); }); From a5e4e4d86e911f3bf033f0929e3c5652915d95bf Mon Sep 17 00:00:00 2001 From: daledah Date: Wed, 9 Apr 2025 16:22:13 +0700 Subject: [PATCH 2/2] fix: update test case --- tests/actions/IOUTest.ts | 135 ++++++++++++++------------------------- 1 file changed, 47 insertions(+), 88 deletions(-) diff --git a/tests/actions/IOUTest.ts b/tests/actions/IOUTest.ts index 64612dbb4ea3..79edd174557e 100644 --- a/tests/actions/IOUTest.ts +++ b/tests/actions/IOUTest.ts @@ -5104,120 +5104,79 @@ describe('actions/IOU', () => { }; const fakePolicy: Policy = { ...createRandomPolicy(1), - type: 'team', + type: CONST.POLICY.TYPE.TEAM, outputCurrency: 'USD', }; const fakePersonalPolicy: Policy = { ...createRandomPolicy(2), - type: 'personal', + type: CONST.POLICY.TYPE.PERSONAL, outputCurrency: 'NZD', }; + const transactionResult: Transaction = { + amount: 0, + comment: { + attendees: [ + { + email: 'rory@expensifail.com', + login: 'rory@expensifail.com', + accountID: 3, + text: 'rory@expensifail.com', + selected: true, + reportID: '0', + avatarUrl: '', + displayName: '', + }, + ], + }, + created: '2025-04-01', + currency: 'USD', + iouRequestType: 'manual', + reportID: fakeReport.reportID, + transactionID: CONST.IOU.OPTIMISTIC_TRANSACTION_ID, + isFromGlobalCreate: true, + merchant: '(none)', + splitPayerAccountIDs: [3], + }; beforeEach(async () => { - await Onyx.set(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}1`, null); + await Onyx.set(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${CONST.IOU.OPTIMISTIC_TRANSACTION_ID}`, null); await Onyx.merge(`${ONYXKEYS.CURRENT_DATE}`, '2025-04-01'); - await Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT}0`, fakeReport); - await Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY}1`, fakePolicy); - await Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY}2`, fakePersonalPolicy); + await Onyx.merge(`${ONYXKEYS.COLLECTION.REPORT}${fakeReport.reportID}`, fakeReport); + await Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY}${fakePolicy.id}`, fakePolicy); + await Onyx.merge(`${ONYXKEYS.COLLECTION.POLICY}${fakePersonalPolicy.id}`, fakePersonalPolicy); return waitForBatchedUpdates(); }); - it('should merge transaction draft onyx value', () => { - return waitForBatchedUpdates() + it('should merge transaction draft onyx value', async () => { + await waitForBatchedUpdates() .then(() => { - return initMoneyRequest('0', fakePolicy, true, undefined, 'manual'); + initMoneyRequest(fakeReport.reportID, fakePolicy, true, undefined, CONST.IOU.REQUEST_TYPE.MANUAL); }) .then(async () => { - expect(await getOnyxValue(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}1`)).toStrictEqual({ - amount: 0, - comment: { - attendees: [ - { - email: 'rory@expensifail.com', - login: 'rory@expensifail.com', - accountID: 3, - text: 'rory@expensifail.com', - selected: true, - reportID: '0', - avatarUrl: '', - displayName: '', - }, - ], - }, - created: '2025-04-01', - currency: 'USD', - iouRequestType: 'manual', - reportID: '0', - transactionID: '1', - isFromGlobalCreate: true, - merchant: '(none)', - splitPayerAccountIDs: [3], - }); + expect(await getOnyxValue(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${CONST.IOU.OPTIMISTIC_TRANSACTION_ID}`)).toStrictEqual(transactionResult); }); }); - it('should modify transaction draft when currentIouRequestType is different', () => { - return waitForBatchedUpdates() + it('should modify transaction draft when currentIouRequestType is different', async () => { + await waitForBatchedUpdates() .then(() => { - return initMoneyRequest('0', fakePolicy, true, 'manual', 'scan'); + return initMoneyRequest(fakeReport.reportID, fakePolicy, true, CONST.IOU.REQUEST_TYPE.MANUAL, CONST.IOU.REQUEST_TYPE.SCAN); }) .then(async () => { - expect(await getOnyxValue(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}1`)).toStrictEqual({ - amount: 0, - comment: { - attendees: [ - { - email: 'rory@expensifail.com', - login: 'rory@expensifail.com', - accountID: 3, - text: 'rory@expensifail.com', - selected: true, - reportID: '0', - avatarUrl: '', - displayName: '', - }, - ], - }, - created: '2025-04-01', - currency: 'USD', - iouRequestType: 'scan', - reportID: '0', - transactionID: '1', - isFromGlobalCreate: true, - merchant: '(none)', - splitPayerAccountIDs: [3], + expect(await getOnyxValue(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${CONST.IOU.OPTIMISTIC_TRANSACTION_ID}`)).toStrictEqual({ + ...transactionResult, + iouRequestType: CONST.IOU.REQUEST_TYPE.SCAN, }); }); }); - it('should return personal currency when policy is missing', () => { - return waitForBatchedUpdates() + it('should return personal currency when policy is missing', async () => { + await waitForBatchedUpdates() .then(() => { - return initMoneyRequest('0', undefined, true, undefined, 'manual'); + return initMoneyRequest(fakeReport.reportID, undefined, true, undefined, CONST.IOU.REQUEST_TYPE.MANUAL); }) .then(async () => { - expect(await getOnyxValue(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}1`)).toStrictEqual({ - amount: 0, - comment: { - attendees: [ - { - email: 'rory@expensifail.com', - login: 'rory@expensifail.com', - accountID: 3, - text: 'rory@expensifail.com', - selected: true, - reportID: '0', - avatarUrl: '', - displayName: '', - }, - ], - }, - created: '2025-04-01', - currency: 'NZD', - iouRequestType: 'manual', - reportID: '0', - transactionID: '1', - isFromGlobalCreate: true, - merchant: '(none)', - splitPayerAccountIDs: [3], + expect(await getOnyxValue(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${CONST.IOU.OPTIMISTIC_TRANSACTION_ID}`)).toStrictEqual({ + ...transactionResult, + currency: fakePersonalPolicy.outputCurrency, }); }); });