Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/libs/TransactionUtils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2541,6 +2541,11 @@ function getAllSortedTransactions(iouReportID?: string): Array<OnyxEntry<Transac
}

function isExpenseSplit(transaction: OnyxEntry<Transaction>, originalTransaction?: OnyxEntry<Transaction>): boolean {
const isAddedToReport = !!transaction?.reportID && transaction.reportID !== CONST.REPORT.SPLIT_REPORT_ID && transaction.reportID !== CONST.REPORT.UNREPORTED_REPORT_ID;
if (isAddedToReport) {
return false;
}

if (!originalTransaction) {
return !!transaction?.comment?.originalTransactionID && transaction?.comment?.source === 'split';
}
Expand Down
2 changes: 2 additions & 0 deletions tests/actions/MergeTransactionTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -736,6 +736,7 @@ describe('areTransactionsEligibleForMerge', () => {
it('can not merge 2 split expenses', () => {
const splitExpenseTransaction1 = {
...createRandomTransaction(1),
reportID: CONST.REPORT.SPLIT_REPORT_ID,
managedCard: false,
cardName: CONST.EXPENSE.TYPE.CASH_CARD_NAME,
comment: {
Expand All @@ -746,6 +747,7 @@ describe('areTransactionsEligibleForMerge', () => {
} as Transaction;
const splitExpenseTransaction2 = {
...createRandomTransaction(2),
reportID: CONST.REPORT.SPLIT_REPORT_ID,
managedCard: false,
cardName: CONST.EXPENSE.TYPE.CASH_CARD_NAME,
comment: {
Expand Down
1 change: 1 addition & 0 deletions tests/unit/MergeTransactionUtilsTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -423,6 +423,7 @@ describe('MergeTransactionUtils', () => {
it('should keep split expense when merging split and cash expenses', () => {
const targetTransaction = {
...createRandomTransaction(1),
reportID: CONST.REPORT.SPLIT_REPORT_ID,
amount: 1000,
currency: CONST.CURRENCY.USD,
comment: {
Expand Down
67 changes: 67 additions & 0 deletions tests/unit/TransactionUtilsTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1711,4 +1711,71 @@ describe('TransactionUtils', () => {
expect(TransactionUtils.getConvertedAmount(transaction, true, false, false, true)).toBe(-100);
});
});

describe('isExpenseSplit', () => {
it('should return false when transaction is assigned to a real report', () => {
const transaction = generateTransaction({
reportID: '12345',
comment: {
source: CONST.IOU.TYPE.SPLIT,
originalTransactionID: 'original123',
},
});
expect(TransactionUtils.isExpenseSplit(transaction)).toBe(false);
});

it('should return true when transaction is in split report and has split comment', () => {
const transaction = generateTransaction({
reportID: CONST.REPORT.SPLIT_REPORT_ID,
comment: {
source: CONST.IOU.TYPE.SPLIT,
originalTransactionID: 'original123',
},
});
expect(TransactionUtils.isExpenseSplit(transaction)).toBe(true);
});

it('should return true when transaction is unreported and has split comment', () => {
const transaction = generateTransaction({
reportID: CONST.REPORT.UNREPORTED_REPORT_ID,
comment: {
source: CONST.IOU.TYPE.SPLIT,
originalTransactionID: 'original123',
},
});
expect(TransactionUtils.isExpenseSplit(transaction)).toBe(true);
});

it('should return true when transaction has no reportID and has split comment', () => {
const transaction = generateTransaction({
reportID: undefined,
comment: {
source: CONST.IOU.TYPE.SPLIT,
originalTransactionID: 'original123',
},
});
expect(TransactionUtils.isExpenseSplit(transaction)).toBe(true);
});

it('should return false when transaction comment source is not split', () => {
const transaction = generateTransaction({
reportID: CONST.REPORT.SPLIT_REPORT_ID,
comment: {
source: CONST.IOU.TYPE.REQUEST,
originalTransactionID: 'original123',
},
});
expect(TransactionUtils.isExpenseSplit(transaction)).toBe(false);
});

it('should return false when transaction comment is missing originalTransactionID', () => {
const transaction = generateTransaction({
reportID: CONST.REPORT.SPLIT_REPORT_ID,
comment: {
source: CONST.IOU.TYPE.SPLIT,
},
});
expect(TransactionUtils.isExpenseSplit(transaction)).toBe(false);
});
});
});
Loading