@@ -8091,6 +8091,7 @@ describe('actions/IOU', () => {
80918091 currentDate,
80928092 currentUserPersonalDetails,
80938093 hasOnlyPersonalPolicies: false,
8094+ draftTransactions: undefined,
80948095 });
80958096 })
80968097 .then(async () => {
@@ -8113,6 +8114,7 @@ describe('actions/IOU', () => {
81138114 currentDate,
81148115 currentUserPersonalDetails,
81158116 hasOnlyPersonalPolicies: false,
8117+ draftTransactions: undefined,
81168118 });
81178119 })
81188120 .then(async () => {
@@ -8136,6 +8138,7 @@ describe('actions/IOU', () => {
81368138 currentDate,
81378139 currentUserPersonalDetails,
81388140 hasOnlyPersonalPolicies: false,
8141+ draftTransactions: undefined,
81398142 });
81408143 })
81418144 .then(async () => {
@@ -8145,6 +8148,134 @@ describe('actions/IOU', () => {
81458148 });
81468149 });
81478150 });
8151+
8152+ it('should remove non-optimistic draft transactions when draftTransactions is provided', async () => {
8153+ const otherDraftTransactionID = '123456';
8154+ const otherDraftTransaction: Transaction = {
8155+ ...createRandomTransaction(1),
8156+ transactionID: otherDraftTransactionID,
8157+ };
8158+
8159+ // Set up an additional draft transaction
8160+ await Onyx.set(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${otherDraftTransactionID}`, otherDraftTransaction);
8161+
8162+ const draftTransactions = {
8163+ [`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${otherDraftTransactionID}`]: otherDraftTransaction,
8164+ };
8165+
8166+ await waitForBatchedUpdates()
8167+ .then(() => {
8168+ initMoneyRequest({
8169+ reportID: fakeReport.reportID,
8170+ policy: fakePolicy,
8171+ personalPolicy: fakePersonalPolicy,
8172+ isFromGlobalCreate: true,
8173+ newIouRequestType: CONST.IOU.REQUEST_TYPE.MANUAL,
8174+ report: fakeReport,
8175+ parentReport: fakeParentReport,
8176+ currentDate,
8177+ currentUserPersonalDetails,
8178+ hasOnlyPersonalPolicies: false,
8179+ draftTransactions,
8180+ });
8181+ })
8182+ .then(async () => {
8183+ // The other draft transaction should be removed (Onyx returns undefined for removed keys)
8184+ expect(await getOnyxValue(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${otherDraftTransactionID}`)).toBeUndefined();
8185+ // The optimistic transaction should be created
8186+ expect(await getOnyxValue(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${CONST.IOU.OPTIMISTIC_TRANSACTION_ID}`)).toStrictEqual(transactionResult);
8187+ });
8188+ });
8189+
8190+ it('should preserve optimistic transaction in draftTransactions while removing others', async () => {
8191+ const otherDraftTransactionID = '789012';
8192+ const otherDraftTransaction: Transaction = {
8193+ ...createRandomTransaction(2),
8194+ transactionID: otherDraftTransactionID,
8195+ };
8196+ const existingOptimisticTransaction: Transaction = {
8197+ ...createRandomTransaction(3),
8198+ transactionID: CONST.IOU.OPTIMISTIC_TRANSACTION_ID,
8199+ };
8200+
8201+ // Set up both draft transactions
8202+ await Onyx.set(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${otherDraftTransactionID}`, otherDraftTransaction);
8203+ await Onyx.set(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${CONST.IOU.OPTIMISTIC_TRANSACTION_ID}`, existingOptimisticTransaction);
8204+
8205+ const draftTransactions = {
8206+ [`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${otherDraftTransactionID}`]: otherDraftTransaction,
8207+ [`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${CONST.IOU.OPTIMISTIC_TRANSACTION_ID}`]: existingOptimisticTransaction,
8208+ };
8209+
8210+ await waitForBatchedUpdates()
8211+ .then(() => {
8212+ initMoneyRequest({
8213+ reportID: fakeReport.reportID,
8214+ policy: fakePolicy,
8215+ personalPolicy: fakePersonalPolicy,
8216+ isFromGlobalCreate: true,
8217+ newIouRequestType: CONST.IOU.REQUEST_TYPE.MANUAL,
8218+ report: fakeReport,
8219+ parentReport: fakeParentReport,
8220+ currentDate,
8221+ currentUserPersonalDetails,
8222+ hasOnlyPersonalPolicies: false,
8223+ draftTransactions,
8224+ });
8225+ })
8226+ .then(async () => {
8227+ // The other draft transaction should be removed (Onyx returns undefined for removed keys)
8228+ expect(await getOnyxValue(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${otherDraftTransactionID}`)).toBeUndefined();
8229+ // The optimistic transaction should be updated with the new transaction result (not removed)
8230+ expect(await getOnyxValue(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${CONST.IOU.OPTIMISTIC_TRANSACTION_ID}`)).toStrictEqual(transactionResult);
8231+ });
8232+ });
8233+
8234+ it('should remove multiple draft transactions when draftTransactions contains several entries', async () => {
8235+ const draftTransactionID1 = '111111';
8236+ const draftTransactionID2 = '222222';
8237+ const draftTransaction1: Transaction = {
8238+ ...createRandomTransaction(4),
8239+ transactionID: draftTransactionID1,
8240+ };
8241+ const draftTransaction2: Transaction = {
8242+ ...createRandomTransaction(5),
8243+ transactionID: draftTransactionID2,
8244+ };
8245+
8246+ // Set up multiple draft transactions
8247+ await Onyx.set(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${draftTransactionID1}`, draftTransaction1);
8248+ await Onyx.set(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${draftTransactionID2}`, draftTransaction2);
8249+
8250+ const draftTransactions = {
8251+ [`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${draftTransactionID1}`]: draftTransaction1,
8252+ [`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${draftTransactionID2}`]: draftTransaction2,
8253+ };
8254+
8255+ await waitForBatchedUpdates()
8256+ .then(() => {
8257+ initMoneyRequest({
8258+ reportID: fakeReport.reportID,
8259+ policy: fakePolicy,
8260+ personalPolicy: fakePersonalPolicy,
8261+ isFromGlobalCreate: true,
8262+ newIouRequestType: CONST.IOU.REQUEST_TYPE.MANUAL,
8263+ report: fakeReport,
8264+ parentReport: fakeParentReport,
8265+ currentDate,
8266+ currentUserPersonalDetails,
8267+ hasOnlyPersonalPolicies: false,
8268+ draftTransactions,
8269+ });
8270+ })
8271+ .then(async () => {
8272+ // Both draft transactions should be removed (Onyx returns undefined for removed keys)
8273+ expect(await getOnyxValue(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${draftTransactionID1}`)).toBeUndefined();
8274+ expect(await getOnyxValue(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${draftTransactionID2}`)).toBeUndefined();
8275+ // The optimistic transaction should be created
8276+ expect(await getOnyxValue(`${ONYXKEYS.COLLECTION.TRANSACTION_DRAFT}${CONST.IOU.OPTIMISTIC_TRANSACTION_ID}`)).toStrictEqual(transactionResult);
8277+ });
8278+ });
81488279 });
81498280
81508281 describe('updateMoneyRequestAmountAndCurrency', () => {
0 commit comments