Skip to content

Commit

Permalink
Add TransactionPreviewUtils tests
Browse files Browse the repository at this point in the history
  • Loading branch information
JakubKorytko committed Mar 10, 2025
1 parent 92a6498 commit 6f434c4
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 3 deletions.
6 changes: 3 additions & 3 deletions src/libs/TransactionPreviewUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,7 @@ function createTransactionPreviewConditionals({
areThereDuplicates,
}: {
iouReport: OnyxInputValue<OnyxTypes.Report> | undefined;
transaction: OnyxEntry<OnyxTypes.Transaction>;
transaction: OnyxEntry<OnyxTypes.Transaction> | undefined;
translate: LocaleContextProps['translate'];
action: OnyxTypes.ReportAction;
violations: OnyxTypes.TransactionViolations;
Expand All @@ -270,7 +270,6 @@ function createTransactionPreviewConditionals({
}) {
const {amount: requestAmount, comment: requestComment, merchant, tag, category} = transactions;

// const hasReceipt = TransactionUtils.hasReceipt(transaction);
const isScanning = hasReceipt(transaction) && isReceiptBeingScanned(transaction);

const requestMerchant = truncate(merchant, {length: CONST.REQUEST_PREVIEW.MAX_LENGTH});
Expand All @@ -295,7 +294,8 @@ function createTransactionPreviewConditionals({
const shouldShowTag = !!tag && isReportAPolicyExpenseChat;
const shouldShowCategory = !!category && isReportAPolicyExpenseChat;

const hasAnyViolations = (hasViolationsOfTypeNotice ?? hasWarningTypeViolation(transaction?.transactionID, violations, true)) || hasViolation(transaction, violations, true);
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
const hasAnyViolations = hasViolationsOfTypeNotice || hasWarningTypeViolation(transaction?.transactionID, violations, true) || hasViolation(transaction, violations, true);
const hasErrorOrOnHold = hasFieldErrors || (!isFullySettled && !isFullyApproved && isTransactionOnHold);
const shouldShowRBR = hasAnyViolations || hasErrorOrOnHold;

Expand Down
75 changes: 75 additions & 0 deletions tests/unit/TransactionPreviewUtils.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
import {buildOptimisticIOUReport, buildOptimisticIOUReportAction} from '@libs/ReportUtils';
import {createTransactionPreviewConditionals, createTransactionPreviewText} from '@libs/TransactionPreviewUtils';
import {buildOptimisticTransaction} from '@libs/TransactionUtils';
import CONST from '@src/CONST';

const basicInput = {
iouReport: buildOptimisticIOUReport(123, 234, 1000, '1', 'USD'),
transaction: buildOptimisticTransaction({
transactionParams: {
amount: 100,
currency: 'USD',
reportID: '1',
comment: '',
attendees: [],
created: '2024-01-01',
},
}),
translate: jest.fn().mockImplementation((key: string) => key),
action: buildOptimisticIOUReportAction('create', 100, 'USD', '', [], '1', undefined, '1'),
violations: [],
transactions: {},
isBillSplit: false,
shouldShowRBR: false,
isReportAPolicyExpenseChat: false,
areThereDuplicates: false,
};

describe('TransactionPreviewUtils', () => {
describe('createTransactionPreviewText', () => {
it('should return an empty RBR message when shouldShowRBR is false and no transaction is given', () => {
const result = createTransactionPreviewText({...basicInput, shouldShowRBR: false});
expect(result.RBRmessage).toEqual('');
});

it('returns correct hold message when the transaction is on hold', () => {
const testInput = {
...basicInput,
transaction: {...basicInput.transaction, comment: {hold: 'true'}},
shouldShowRBR: true,
};

const result = createTransactionPreviewText(testInput);
expect(result.RBRmessage).toContain('violations.hold');
});
});

describe('createTransactionPreviewConditionals', () => {
it('should determine RBR visibility according to violation and hold conditions', () => {
const input = {
...basicInput,
violations: [{name: CONST.VIOLATIONS.MISSING_CATEGORY, type: CONST.VIOLATION_TYPES.VIOLATION, transactionID: 123, showInReview: true}],
};
const result = createTransactionPreviewConditionals(input);
expect(result.shouldShowRBR).toBeTruthy();
});

it("should disable onPress when it's a bill split with empty transaction data", () => {
const input = {...basicInput, isBillSplit: true, transaction: undefined};
const result = createTransactionPreviewConditionals(input);
expect(result.shouldDisableOnPress).toBeTruthy();
});

it("should not show category if it's not a policy expense chat", () => {
const input = {...basicInput, isReportAPolicyExpenseChat: false};
const result = createTransactionPreviewConditionals(input);
expect(result.shouldShowCategory).toBeFalsy();
});

it('should show keep button when there are duplicates', () => {
const input = {...basicInput, areThereDuplicates: true};
const result = createTransactionPreviewConditionals(input);
expect(result.shouldShowKeepButton).toBeTruthy();
});
});
});

0 comments on commit 6f434c4

Please sign in to comment.