diff --git a/frontend/interfaces/activity.ts b/frontend/interfaces/activity.ts index 33269a4a39..1a8dc517e4 100644 --- a/frontend/interfaces/activity.ts +++ b/frontend/interfaces/activity.ts @@ -39,6 +39,8 @@ export enum ActivityType { EditedMacOSProfile = "edited_macos_profile", EnabledMacDiskEncryption = "enabled_macos_disk_encryption", DisabledMacDiskEncryption = "disabled_macos_disk_encryption", + ChangedMacOSSetupAssistant = "changed_macos_setup_assistant", + DeletedMacOSSetupAssistant = "deleted_macos_setup_assistant", } export interface IActivity { created_at: string; @@ -75,4 +77,5 @@ export interface IActivityDetails { deadline?: string; profile_name?: string; profile_identifier?: string; + name?: string; } diff --git a/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityItem/ActivityItem.tests.tsx b/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityItem/ActivityItem.tests.tsx index 6c85d04a5d..0fc6a62ca5 100644 --- a/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityItem/ActivityItem.tests.tsx +++ b/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityItem/ActivityItem.tests.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { render, screen } from "@testing-library/react"; +import { render, screen, getDefaultNormalizer } from "@testing-library/react"; import createMockActivity from "__mocks__/activityMock"; import createMockQuery from "__mocks__/queryMock"; @@ -420,4 +420,72 @@ describe("Activity Feed", () => { ).toBeInTheDocument(); expect(screen.queryByText("assigned to the")).toBeNull(); }); + + it("renders a 'changed_macos_setup_assistant' type activity for no team", () => { + const activity = createMockActivity({ + type: ActivityType.ChangedMacOSSetupAssistant, + details: { name: "dep-profile.json" }, + }); + render(); + + expect( + screen.getByText((content, node) => { + return ( + node?.innerHTML === + "Test User changed the macOS Setup Assistant (added dep-profile.json) for hosts that automatically enroll to no team." + ); + }) + ).toBeInTheDocument(); + }); + + it("renders a 'changed_macos_setup_assistant' type activity for a team", () => { + const activity = createMockActivity({ + type: ActivityType.ChangedMacOSSetupAssistant, + details: { name: "dep-profile.json", team_name: "Workstations" }, + }); + render(); + + expect( + screen.getByText((content, node) => { + return ( + node?.innerHTML === + "Test User changed the macOS Setup Assistant (added dep-profile.json) for hosts that automatically enroll to the Workstations team." + ); + }) + ).toBeInTheDocument(); + }); + + it("renders a 'deleted_macos_setup_assistant' type activity for no team", () => { + const activity = createMockActivity({ + type: ActivityType.DeletedMacOSSetupAssistant, + details: { name: "dep-profile.json" }, + }); + render(); + + expect( + screen.getByText((content, node) => { + return ( + node?.innerHTML === + "Test User changed the macOS Setup Assistant (deleted dep-profile.json) for hosts that automatically enroll to no team." + ); + }) + ).toBeInTheDocument(); + }); + + it("renders a 'deleted_macos_setup_assistant' type activity for a team", () => { + const activity = createMockActivity({ + type: ActivityType.DeletedMacOSSetupAssistant, + details: { name: "dep-profile.json", team_name: "Workstations" }, + }); + render(); + + expect( + screen.getByText((content, node) => { + return ( + node?.innerHTML === + "Test User changed the macOS Setup Assistant (deleted dep-profile.json) for hosts that automatically enroll to the Workstations team." + ); + }) + ).toBeInTheDocument(); + }); }); diff --git a/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityItem/ActivityItem.tsx b/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityItem/ActivityItem.tsx index e36a99c8b0..c0e1cadd54 100644 --- a/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityItem/ActivityItem.tsx +++ b/frontend/pages/DashboardPage/cards/ActivityFeed/ActivityItem/ActivityItem.tsx @@ -40,6 +40,29 @@ const getDiskEncryptionMessageSuffix = (teamName?: string | null) => { ); }; +const getMacOSSetupAssistantMessage = ( + action: "added" | "deleted", + name?: string, + teamName?: string | null +) => { + const suffix = teamName ? ( + <> + {" "} + that automatically enroll to the {teamName} team + + ) : ( + <>that automatically enroll to no team + ); + + return ( + <> + {" "} + changed the macOS Setup Assistant ({action} {name}) for hosts{" "} + {suffix}. + + ); +}; + const TAGGED_TEMPLATES = { liveQueryActivityTemplate: ( activity: IActivity, @@ -293,6 +316,20 @@ const TAGGED_TEMPLATES = { const suffix = getDiskEncryptionMessageSuffix(activity.details?.team_name); return <>removed disk encryption enforcement for macOS hosts {suffix}.; }, + changedMacOSSetupAssistant: (activity: IActivity) => { + return getMacOSSetupAssistantMessage( + "added", + activity.details?.name, + activity.details?.team_name + ); + }, + deletedMacOSSetupAssistant: (activity: IActivity) => { + return getMacOSSetupAssistantMessage( + "deleted", + activity.details?.name, + activity.details?.team_name + ); + }, defaultActivityTemplate: (activity: IActivity) => { const entityName = find(activity.details, (_, key) => key.includes("_name") @@ -391,6 +428,12 @@ const getDetail = ( case ActivityType.DisabledMacDiskEncryption: { return TAGGED_TEMPLATES.disableMacDiskEncryption(activity); } + case ActivityType.ChangedMacOSSetupAssistant: { + return TAGGED_TEMPLATES.changedMacOSSetupAssistant(activity); + } + case ActivityType.DeletedMacOSSetupAssistant: { + return TAGGED_TEMPLATES.deletedMacOSSetupAssistant(activity); + } default: { return TAGGED_TEMPLATES.defaultActivityTemplate(activity); }