Skip to content

Commit a553776

Browse files
authored
Merge pull request Expensify#65880 from FitseTLT/fix-display-receipt-upload-error
2 parents 1a74d65 + 22d78b4 commit a553776

2 files changed

Lines changed: 50 additions & 2 deletions

File tree

src/libs/TransactionPreviewUtils.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import DateUtils from './DateUtils';
1313
import type {PlatformStackRouteProp} from './Navigation/PlatformStackNavigation/types';
1414
import type {TransactionDuplicateNavigatorParamList} from './Navigation/types';
1515
import {getOriginalMessage, isMessageDeleted, isMoneyRequestAction} from './ReportActionsUtils';
16-
import {hasActionsWithErrors, hasReportViolations, isPaidGroupPolicy, isPaidGroupPolicyExpenseReport, isReportApproved, isReportOwner, isSettled} from './ReportUtils';
16+
import {hasActionsWithErrors, hasReceiptError, hasReportViolations, isPaidGroupPolicy, isPaidGroupPolicyExpenseReport, isReportApproved, isReportOwner, isSettled} from './ReportUtils';
1717
import type {TransactionDetails} from './ReportUtils';
1818
import StringUtils from './StringUtils';
1919
import {
@@ -194,6 +194,10 @@ function getTransactionPreviewTextAndTranslationPaths({
194194
RBRMessage = path;
195195
}
196196

197+
if (hasReceiptError(transaction) && RBRMessage === undefined) {
198+
RBRMessage = {translationPath: 'iou.error.receiptFailureMessageShort'};
199+
}
200+
197201
if (hasFieldErrors && RBRMessage === undefined) {
198202
const merchantMissing = isMerchantMissing(transaction);
199203
const amountMissing = isAmountMissing(transaction);
@@ -331,7 +335,7 @@ function createTransactionPreviewConditionals({
331335
hasViolation(transaction, violations, true);
332336
const hasErrorOrOnHold = hasFieldErrors || (!isFullySettled && !isFullyApproved && isTransactionOnHold);
333337
const hasReportViolationsOrActionErrors = (isReportOwner(iouReport) && hasReportViolations(iouReport?.reportID)) || hasActionsWithErrors(iouReport?.reportID);
334-
const shouldShowRBR = hasAnyViolations || hasErrorOrOnHold || hasReportViolationsOrActionErrors;
338+
const shouldShowRBR = hasAnyViolations || hasErrorOrOnHold || hasReportViolationsOrActionErrors || hasReceiptError(transaction);
335339

336340
// When there are no settled transactions in duplicates, show the "Keep this one" button
337341
const shouldShowKeepButton = areThereDuplicates;

tests/unit/TransactionPreviewUtils.test.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,29 @@ describe('TransactionPreviewUtils', () => {
6868
expect(result.RBRMessage.translationPath).toContain('iou.expenseWasPutOnHold');
6969
});
7070

71+
it('returns correct receipt error message when the transaction has receipt error', () => {
72+
const functionArgs = {
73+
...basicProps,
74+
transaction: {
75+
...basicProps.transaction,
76+
errors: {
77+
error1: {
78+
error: CONST.IOU.RECEIPT_ERROR,
79+
source: 'source.com',
80+
filename: 'file_name.png',
81+
action: 'replaceReceipt',
82+
retryParams: {transactionID: basicProps.transaction.transactionID, source: 'source.com'},
83+
},
84+
},
85+
},
86+
originalTransaction: undefined,
87+
shouldShowRBR: true,
88+
};
89+
90+
const result = getTransactionPreviewTextAndTranslationPaths(functionArgs);
91+
expect(result.RBRMessage.translationPath).toContain('iou.error.receiptFailureMessageShort');
92+
});
93+
7194
it('should handle missing iouReport and transaction correctly', () => {
7295
const functionArgs = {...basicProps, iouReport: undefined, transaction: undefined, originalTransaction: undefined};
7396
const result = getTransactionPreviewTextAndTranslationPaths(functionArgs);
@@ -208,6 +231,27 @@ describe('TransactionPreviewUtils', () => {
208231
expect(result.shouldShowRBR).toBeTruthy();
209232
});
210233

234+
it('should determine RBR visibility according to whether there is a receipt error', () => {
235+
const functionArgs = {
236+
...basicProps,
237+
transaction: {
238+
...basicProps.transaction,
239+
errors: {
240+
error1: {
241+
error: CONST.IOU.RECEIPT_ERROR,
242+
source: 'source.com',
243+
filename: 'file_name.png',
244+
action: 'replaceReceipt',
245+
retryParams: {transactionID: basicProps.transaction.transactionID, source: 'source.com'},
246+
},
247+
},
248+
},
249+
};
250+
251+
const result = createTransactionPreviewConditionals(functionArgs);
252+
expect(result.shouldShowRBR).toBeTruthy();
253+
});
254+
211255
it("should not show category if it's not a policy expense chat", () => {
212256
const functionArgs = {...basicProps, isReportAPolicyExpenseChat: false};
213257
const result = createTransactionPreviewConditionals(functionArgs);

0 commit comments

Comments
 (0)