[Payment due @truph01] Fix attendees fallback#94481
Conversation
|
@carlosmiceli 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] |
mountiny
left a comment
There was a problem hiding this comment.
LGTM, but looking for C+ to test
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppAndroid: mWeb ChromeiOS: HybridAppiOS: mWeb SafariMacOS: Chrome / SafariScreen.Recording.2026-06-30.at.16.19.32.mov |
|
The tests cover two cases: (a) no login/displayName, (b) session email fallback. There's no test for the happy path where login is present, which is the most common case and would verify the existing behavior doesn't regress. @lakchote Could you add it? |
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
|
@truph01 it's ready to merge |
|
@lakchote Could you resolve conflicts? |
# Conflicts: # src/libs/IOUUtils.ts
|
@truph01 conflicts fixed |
| const login = currentUser.login ? currentUser.login : (currentUser.email ?? ''); | ||
| const displayName = currentUser.displayName ? currentUser.displayName : login; |
There was a problem hiding this comment.
const login = currentUser.login || currentUser.email || '';
const displayName = currentUser.displayName || login;
There was a problem hiding this comment.
@lakchote Could you apply this change? #94481 (comment)
There was a problem hiding this comment.
|
@Beamanator 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] |
|
🎯 @truph01, thanks for reviewing and testing this PR! 🎉 A payment issue will be created for your review once this PR is deployed to production. If payment is not needed (e.g., regression PR review fix etc), react with 👎 to this comment to prevent the payment issue from being created. |
mountiny
left a comment
There was a problem hiding this comment.
Carlos already approved so we can merge
|
🚧 mountiny has triggered a test Expensify/App build. You can view the workflow run here. |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
🚀 Deployed to staging by https://github.com/mountiny in version: 9.4.26-0 🚀
|
|
🤖 Help site review: no docs changes required. This PR is a purely internal bug fix. It updates The only relevant public article is Adding Attendees, and none of its documented behavior changes here:
No help-site article references a "default" or auto-seeded attendee, so there is nothing to update. I did not create a draft PR. @lakchote, let me know if you'd still like a docs PR (e.g. an FAQ note about the default attendee), and I'll create one. |
|
🚀 Deployed to production by https://github.com/grgia in version: 9.4.27-2 🚀
Bundle Size Analysis (Sentry): |
|
🤖 Payment issue created: #95401 |

Explanation of Change
NewDot no longer seeds a blank current-user attendee when the user's personal details are not fully hydrated.
CreateMoneyRequestreceived an attendee withaccountIDbut emptyemailanddisplayName-> the blank attendee could be stored by Auth before the backend hardening -> the expense could render a blank or duplicate-looking attendee.CurrentUserPersonalDetailsProvider: current user details are built from personal details plusemail: session?.email, soformatCurrentUserToAttendee()can use the session email whileloginis still missing.The fix prevents that by:
loginis not hydrated yet.login, session email, anddisplayNameare all missing.IOUUtilsTestso NewDot does not reintroduce the accountID-only attendee.With this change, NewDot drafts use a real current-user attendee when possible and otherwise avoid seeding the blank attendee that caused the broken expense state.
Fixed Issues
Related to #94057
Tests
npm test -- tests/unit/IOUUtilsTest.ts --runInBandOffline tests
NA
QA Steps
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectiontoggleReportand notonIconClick)myBool && <MyComponent />.src/languages/*files and using the translation methodWaiting for Copylabel for a copy review on the original GH to get the correct copy.STYLE.md) were followedAvatar, I verified the components usingAvatarare working as expected)/** comment above it */thisare necessary to be bound (i.e. avoidthis.submit = this.submit.bind(this);ifthis.submitis never passed to a component event handler likeonClick)StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG))Avataris modified, I verified thatAvataris working as expected in all cases)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/Videosundefined