Fix desktop badge workspace parity
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import {
|
||||
deriveMacDockBadgeCountFromWorkspaceStatuses,
|
||||
isWorkspaceActionableForDesktopBadge,
|
||||
} from "./desktop-badge-state";
|
||||
|
||||
describe("desktop-badge-state", () => {
|
||||
it("treats attention-requiring workspace statuses as actionable", () => {
|
||||
expect(isWorkspaceActionableForDesktopBadge("attention")).toBe(true);
|
||||
expect(isWorkspaceActionableForDesktopBadge("needs_input")).toBe(true);
|
||||
expect(isWorkspaceActionableForDesktopBadge("failed")).toBe(true);
|
||||
});
|
||||
|
||||
it("ignores running and done workspace statuses", () => {
|
||||
expect(isWorkspaceActionableForDesktopBadge("running")).toBe(false);
|
||||
expect(isWorkspaceActionableForDesktopBadge("done")).toBe(false);
|
||||
});
|
||||
|
||||
it("returns undefined when no visible workspaces need attention", () => {
|
||||
expect(deriveMacDockBadgeCountFromWorkspaceStatuses(["done", "running"])).toBeUndefined();
|
||||
});
|
||||
|
||||
it("counts only actionable visible workspaces", () => {
|
||||
expect(
|
||||
deriveMacDockBadgeCountFromWorkspaceStatuses([
|
||||
"done",
|
||||
"attention",
|
||||
"running",
|
||||
"needs_input",
|
||||
"failed",
|
||||
]),
|
||||
).toBe(3);
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,16 @@
|
||||
import type { WorkspaceDescriptor } from "@/stores/session-store";
|
||||
|
||||
export type DesktopBadgeWorkspaceStatus = WorkspaceDescriptor["status"];
|
||||
|
||||
export function isWorkspaceActionableForDesktopBadge(
|
||||
status: DesktopBadgeWorkspaceStatus,
|
||||
): boolean {
|
||||
return status === "attention" || status === "needs_input" || status === "failed";
|
||||
}
|
||||
|
||||
export function deriveMacDockBadgeCountFromWorkspaceStatuses(
|
||||
statuses: readonly DesktopBadgeWorkspaceStatus[],
|
||||
): number | undefined {
|
||||
const actionableCount = statuses.filter(isWorkspaceActionableForDesktopBadge).length;
|
||||
return actionableCount > 0 ? actionableCount : undefined;
|
||||
}
|
||||
Reference in New Issue
Block a user