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);
}