From b6d983f7eafc478bacb32475bd9ca287042465ec Mon Sep 17 00:00:00 2001 From: Jackie Chan Date: Thu, 9 Jan 2025 17:27:56 -0800 Subject: [PATCH] fix(uaa-parity): Handle UAA Promotion Fix (#3835) * fix(uaa-parity): Handle UAA promoted_from field * fix(uaa-parity): Add version promotion tests --- src/api/Feed.js | 4 ++ src/api/__tests__/Feed.test.js | 27 ++++++++++ src/api/fixtures.js | 49 +++++++++++++++++++ src/constants.js | 1 + .../version/__tests__/Version.test.js | 21 ++++++++ 5 files changed, 102 insertions(+) diff --git a/src/api/Feed.js b/src/api/Feed.js index af0401e4fa..fccf25f066 100644 --- a/src/api/Feed.js +++ b/src/api/Feed.js @@ -25,6 +25,7 @@ import AppActivityAPI from './AppActivity'; import { ACTION_TYPE_CREATED, ACTION_TYPE_RESTORED, + ACTION_TYPE_PROMOTED, ACTION_TYPE_TRASHED, ERROR_CODE_CREATE_TASK, ERROR_CODE_UPDATE_TASK, @@ -250,6 +251,9 @@ export const getParsedFileActivitiesResponse = ( versionsItem.restored_at = versionsItem.start.restored_at; versionsItem.restored_by = { ...versionsItem.start.restored_by }; } + if (versionsItem.action_type === ACTION_TYPE_PROMOTED && versionsItem.start?.promoted_from) { + versionsItem.version_promoted = versionsItem.start?.promoted_from; + } } return versionsItem; diff --git a/src/api/__tests__/Feed.test.js b/src/api/__tests__/Feed.test.js index d39b649b82..f588ab4f9e 100644 --- a/src/api/__tests__/Feed.test.js +++ b/src/api/__tests__/Feed.test.js @@ -28,6 +28,7 @@ import { threadedCommentsFormatted, annotationsWithFormattedReplies as mockFormattedAnnotations, fileActivitiesVersion, + promotedFileActivitiesVersion, } from '../fixtures'; const mockErrors = [{ code: 'error_code_0' }, { code: 'error_code_1' }]; @@ -2352,5 +2353,31 @@ describe('api/Feed', () => { }, ]); }); + + test('should return a parsed entries array when response is valid', () => { + const mockUser = fileActivitiesVersion.start.created_by; + const promotedFileActivities = { + entries: [ + { + activity_type: FILE_ACTIVITY_TYPE_VERSION, + source: { versions: promotedFileActivitiesVersion }, + }, + ], + }; + + expect(getParsedFileActivitiesResponse(promotedFileActivities)).toEqual([ + { + ...promotedFileActivitiesVersion, + uploader_display_name: 'John Doe', + type: FEED_ITEM_TYPE_VERSION, + version_number: 4, + version_end: 4, + version_start: 4, + id: '123', + collaborators: { 42: mockUser }, + version_promoted: 2, + }, + ]); + }); }); }); diff --git a/src/api/fixtures.js b/src/api/fixtures.js index 2438916309..4cd3bc8bfa 100644 --- a/src/api/fixtures.js +++ b/src/api/fixtures.js @@ -132,6 +132,55 @@ export const fileActivitiesVersion = { action_type: 'created', }; +export const promotedFileActivitiesVersion = { + end: { + created_at: '2022-01-05T10:12:28.000-08:00', + created_by: { + id: '42', + name: 'John Doe', + login: 'johndoe@box.com', + type: 'user', + }, + id: '123', + number: 4, + uploader_display_name: 'John Doe', + type: 'file_version', + promoted_from: 2, + }, + start: { + created_at: '2022-01-05T10:12:28.000-08:00', + created_by: { + id: '42', + name: 'John Doe', + login: 'johndoe@box.com', + type: 'user', + }, + id: '123', + number: 4, + uploader_display_name: 'John Doe', + type: 'file_version', + promoted_from: 2, + }, + action_by: [ + { + id: '42', + name: 'John Doe', + login: 'johndoe@box.com', + type: 'user', + }, + ], + created_by: [ + { + id: '42', + name: 'John Doe', + login: 'johndoe@box.com', + type: 'user', + }, + ], + type: 'versions', + action_type: 'promoted', +}; + export const annotationsWithFormattedReplies = [ { created_at: '2022-08-19T03:39:00-07:00', diff --git a/src/constants.js b/src/constants.js index cbb17d01e8..70af26ad0a 100644 --- a/src/constants.js +++ b/src/constants.js @@ -499,6 +499,7 @@ export const ACTIVITY_FILTER_OPTION_UNRESOLVED: 'open' = 'open'; /* ------------------ File Activity Action Types ----------- */ export const ACTION_TYPE_CREATED: 'created' = 'created'; export const ACTION_TYPE_RESTORED: 'restored' = 'restored'; +export const ACTION_TYPE_PROMOTED: 'promoted' = 'promoted'; export const ACTION_TYPE_TRASHED: 'trashed' = 'trashed'; /* ------------------ File Activity Types ------------------ */ diff --git a/src/elements/content-sidebar/activity-feed/version/__tests__/Version.test.js b/src/elements/content-sidebar/activity-feed/version/__tests__/Version.test.js index 4e95a16ddf..b091892f87 100644 --- a/src/elements/content-sidebar/activity-feed/version/__tests__/Version.test.js +++ b/src/elements/content-sidebar/activity-feed/version/__tests__/Version.test.js @@ -96,4 +96,25 @@ describe('elements/content-sidebar/ActivityFeed/version/Version', () => { version_number: '1', }); }); + + test('should correctly render promoted version', () => { + selectors.getVersionUser = jest.fn().mockReturnValueOnce(defaultUser); + + const version = { + id: '14', + modified_at: Date.now(), + modified_by: defaultUser, + version_number: '10', + version_promoted: '2', + }; + + const wrapper = shallow(); + + expect(wrapper.hasClass('bcs-Version')).toBe(true); + expect(wrapper.find('FormattedMessage').prop('values')).toEqual({ + name: {defaultUser.name}, + version_number: '10', + version_promoted: '2', + }); + }); });