From dfd16a1ef624e0aec7bfcb3a37907b337839bf5d Mon Sep 17 00:00:00 2001 From: gillespi314 <73313222+gillespi314@users.noreply.github.com> Date: Thu, 22 Jun 2023 11:01:42 -0500 Subject: [PATCH] Add transferred hosts to activity feed UI (#12442) --- .../issue-12297-ui-transferred-hosts-activity | 1 + frontend/interfaces/activity.ts | 3 + .../ActivityItem/ActivityItem.tests.tsx | 74 +++++++++++++++++++ .../ActivityItem/ActivityItem.tsx | 24 ++++++ 4 files changed, 102 insertions(+) create mode 100644 changes/issue-12297-ui-transferred-hosts-activity diff --git a/changes/issue-12297-ui-transferred-hosts-activity b/changes/issue-12297-ui-transferred-hosts-activity new file mode 100644 index 0000000000..cbfcf1e25f --- /dev/null +++ b/changes/issue-12297-ui-transferred-hosts-activity @@ -0,0 +1 @@ +- Updated UI for transferred hosts activity items. \ No newline at end of file diff --git a/frontend/interfaces/activity.ts b/frontend/interfaces/activity.ts index ad17881a7f..668436aacf 100644 --- a/frontend/interfaces/activity.ts +++ b/frontend/interfaces/activity.ts @@ -45,6 +45,7 @@ export enum ActivityType { DeletedMacOSSetupAssistant = "deleted_macos_setup_assistant", EnabledMacOSSetupEndUserAuth = "enabled_macos_setup_end_user_auth", DisabledMacOSSetupEndUserAuth = "disabled_macos_setup_end_user_auth", + TransferredHosts = "transferred_hosts", } export interface IActivity { created_at: string; @@ -76,6 +77,8 @@ export interface IActivityDetails { role?: UserRole; host_serial?: string; host_display_name?: string; + host_display_names?: string[]; + host_ids?: number[]; installed_from_dep?: boolean; minimum_version?: string; deadline?: string; diff --git a/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityItem/ActivityItem.tests.tsx b/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityItem/ActivityItem.tests.tsx index a4333f86b5..ec6389c781 100644 --- a/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityItem/ActivityItem.tests.tsx +++ b/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityItem/ActivityItem.tests.tsx @@ -634,4 +634,78 @@ describe("Activity Feed", () => { ) ).toBeInTheDocument(); }); + + it("renders a 'transferred_hosts' type activity for one host transferred to no team.", () => { + const activity = createMockActivity({ + type: ActivityType.TransferredHosts, + details: { + host_ids: [1], + host_display_names: ["foo"], + }, + }); + render(); + + expect( + screen.getByText("transferred host", { exact: false }) + ).toBeInTheDocument(); + expect(screen.getByText("foo", { exact: false })).toBeInTheDocument(); + expect(screen.getByText("no team", { exact: false })).toBeInTheDocument(); + }); + + it("renders a 'transferred_hosts' type activity for one host transferred to a team.", () => { + const activity = createMockActivity({ + type: ActivityType.TransferredHosts, + details: { + host_ids: [1], + host_display_names: ["foo"], + team_name: "Alphas", + }, + }); + render(); + + expect( + screen.getByText("transferred host", { exact: false }) + ).toBeInTheDocument(); + expect(screen.getByText("foo", { exact: false })).toBeInTheDocument(); + expect(screen.getByText("Alphas", { exact: false })).toBeInTheDocument(); + }); + + it("renders a 'transferred_hosts' type activity for multiple hosts transferred to no team.", () => { + const activity = createMockActivity({ + type: ActivityType.TransferredHosts, + details: { + host_ids: [1, 2, 3], + host_display_names: ["foo", "bar", "baz"], + }, + }); + render(); + + expect( + screen.getByText("transferred 3 hosts", { exact: false }) + ).toBeInTheDocument(); + expect(screen.queryByText("foo")).toBeNull(); + expect(screen.queryByText("bar")).toBeNull(); + expect(screen.queryByText("baz")).toBeNull(); + expect(screen.getByText("no team", { exact: false })).toBeInTheDocument(); + }); + + it("renders a 'transferred_hosts' type activity for multiple hosts transferred to a team.", () => { + const activity = createMockActivity({ + type: ActivityType.TransferredHosts, + details: { + host_ids: [1, 2, 3], + host_display_names: ["foo", "bar", "baz"], + team_name: "Alphas", + }, + }); + render(); + + expect( + screen.getByText("transferred 3 hosts", { exact: false }) + ).toBeInTheDocument(); + expect(screen.queryByText("foo")).toBeNull(); + expect(screen.queryByText("bar")).toBeNull(); + expect(screen.queryByText("baz")).toBeNull(); + expect(screen.getByText("Alphas", { exact: false })).toBeInTheDocument(); + }); }); diff --git a/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityItem/ActivityItem.tsx b/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityItem/ActivityItem.tsx index b9d91ed740..db8950535c 100644 --- a/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityItem/ActivityItem.tsx +++ b/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityItem/ActivityItem.tsx @@ -24,6 +24,7 @@ const PREMIUM_ACTIVITIES = new Set([ "disabled_macos_disk_encryption", "enabled_macos_setup_end_user_auth", "disabled_macos_setup_end_user_auth", + "tranferred_hosts", ]); const getProfileMessageSuffix = ( @@ -443,6 +444,26 @@ const TAGGED_TEMPLATES = { ); }, + transferredHosts: (activity: IActivity) => { + const hostNames = activity.details?.host_display_names || []; + const teamName = activity.details?.team_name; + if (hostNames.length === 1) { + return ( + <> + {" "} + transferred host {hostNames[0]} to {teamName ? "team " : ""} + {teamName || "no team"}. + + ); + } + return ( + <> + {" "} + transferred {hostNames.length} hosts to {teamName ? "team " : ""} + {teamName || "no team"}. + + ); + }, }; const getDetail = ( @@ -544,6 +565,9 @@ const getDetail = ( case ActivityType.DisabledMacOSSetupEndUserAuth: { return TAGGED_TEMPLATES.disabledMacOSSetupEndUserAuth(activity); } + case ActivityType.TransferredHosts: { + return TAGGED_TEMPLATES.transferredHosts(activity); + } default: { return TAGGED_TEMPLATES.defaultActivityTemplate(activity); }