From 173ff52e1861d9dc94c4f35bcc6bbf1cd0d8ba13 Mon Sep 17 00:00:00 2001 From: Julien Tant <785518+JulienTant@users.noreply.github.com> Date: Thu, 25 Apr 2024 08:45:50 -0700 Subject: [PATCH] [MM-57121] Remove remote_id if necessary when merging user profile (#26826) --- .../src/reducers/entities/users.test.ts | 20 +++++++++++++++++++ .../src/reducers/entities/users.ts | 5 +++++ 2 files changed, 25 insertions(+) diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/users.test.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/users.test.ts index 4610e9b1c0..7e88a27b8a 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/users.test.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/users.test.ts @@ -746,6 +746,26 @@ describe('Reducers.users', () => { }); }); + test(`should remove remote_id when not set anymore (${actionType})`, () => { + const user1 = TestHelper.getUserMock({id: 'user_id1', remote_id: 'abcdef'}); + const user1WithoutRemoteId = TestHelper.getUserMock({id: 'user_id1'}); + + const state = deepFreezeAndThrowOnMutation({ + profiles: { + [user1.id]: user1, + }, + }); + + const nextState = reducer(state, { + type: actionType, + data: user1WithoutRemoteId, + }); + + expect(nextState.profiles).toEqual({ + [user1.id]: user1WithoutRemoteId, + }); + }); + test(`should not overwrite unsanitized data with sanitized data (${actionType})`, () => { const user1 = TestHelper.getUserMock({ id: 'user_id1', diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/users.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/users.ts index d504bb28ea..b3a4aac89a 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/users.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/users.ts @@ -169,6 +169,11 @@ function receiveUserProfile(state: IDMappedObjects, received: UserP ...received, }; + // If there was a remote_id but not anymore, remove it + if (existing.remote_id && !received.remote_id) { + delete merged.remote_id; + } + // MM-53377: // For non-admin users, certain API responses don't return details for the current user that would be sanitized // out for others. This currently includes: