Conversation
Codecov Report❌ Looks like you've decreased code coverage for some files. Please write tests to increase, or at least maintain, the existing level of code coverage. See our documentation here for how to interpret this table.
|
- Add isDistanceRequest import from TransactionUtils - Add validation to prevent merging distance requests with non-distance requests - Use XOR logic to check if transactions have different distance request types
- Extract merge field update logic into reusable getMergeFieldUpdatedValues function - Add customUnit and waypoints fields to MergeTransaction Onyx type - Update DetailsReviewPage to use the new utility function - Add comprehensive test coverage for getMergeFieldUpdatedValues function - Handle special cases for amount field (currency) and merchant field (distance requests) - Ensure proper TypeScript typing with Partial<MergeTransaction> return type
- Update mergeTransactionRequest to include customUnit and waypoints in comment field - Add createRandomDistanceRequestTransaction test utility function - Ensure distance request data is properly serialized in merge transaction API call
… has routes value
- Export areTransactionsEligibleForMerge from MergeTransaction actions - Add 6 test cases for areTransactionsEligibleForMerge covering: * Card transaction rules (both card = false, one card = true) * Zero amount rules (both zero = false, one zero = true) * Distance request rules (mixed = false, both distance = true) * Valid merge cases (both cash with non-zero amounts = true) - Add test for shouldNavigateToReceiptReview with distance requests - Update test data with waypoints, customUnit, and routes fields for distance requests - Reorder imports and clean up test structure - All tests passing with proper mocking and test utilities
…oints/customUnit during merge
- Add fallbackToDefault parameter to DistanceRequestUtils.getRate() - Disable fallback for merge transactions to show 'Rate out of policy' when selected rate is not in policy - Ensures proper rate validation display in merge transaction scenarios
|
@dominictb Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
|
@dominictb this PR is ready for review |
|
🚧 @garrettmknight has triggered a test Expensify/App build. You can view the workflow run here. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, Desktop, and Web. Happy testing! 🧪🧪
|
|
@dominictb I resolved conflicts |
|
@hoangzinh looks like there is an unsigned commit
|
|
Oops, should I rebase and push force to fix that commit? I had an issue with git config last week, it didn't commit with |
|
Yes, can you try a rebase method instead to update only that commit? also we have conflicts |
baaad0b to
cae4383
Compare
|
@dominictb @youssef-lr I resolved conflict and also fixed unverified commit |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚀 Deployed to staging by https://github.com/youssef-lr in version: 9.2.59-0 🚀
|
|
🚀 Deployed to production by https://github.com/grgia in version: 9.2.59-5 🚀
|
…istance expenses When merging workspace distance expenses, the merge confirmation page was unconditionally overriding the rate display with the rate value parsed from the merchant string. This happened because a pre-existing workaround (from PR #71675) assumed that policy rate data was not available in the merge flow. Since the merge flow now properly preserves customUnit data (including customUnitRateID), getRate() can resolve the rate name from the policy. The override is now conditional, only falling back to getRateFromMerchant() when rateName is unavailable (P2P expenses). Co-authored-by: Mohammad Luthfi Fathur Rahman <mollfpr@users.noreply.github.com>

Explanation of Change
Fixed Issues
$ #68183
PROPOSAL:
Tests
Same as QA
Offline tests
Same as QA
QA Steps
// TODO: These must be filled out, or the issue title must include "[No QA]."
Case 1: Merge an unreported distance expense and a workspace distance expense
Case 2: Merge two workspace distance expenses
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectioncanBeMissingparam foruseOnyxtoggleReportand notonIconClick)src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.ScrollViewcomponent to make it scrollable when more elements are added to the page.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
Screen.Recording.2025-10-14.at.19.57.14.android.mov
Android: mWeb Chrome
Screen.Recording.2025-10-14.at.21.42.30.android.chrome.mov
iOS: Native
Screen.Recording.2025-10-14.at.21.45.40.ios.mov
iOS: mWeb Safari
Screen.Recording.2025-10-14.at.21.38.03.ios.safari.mov
MacOS: Chrome / Safari
Screen.Recording.2025-10-10.at.21.29.15.web.mov
MacOS: Desktop
Screen.Recording.2025-10-14.at.08.06.17.desktop.mov