// @vitest-environment jsdom
import { StrictMode, act } from "react";
import { createRoot } from "react-dom/client";
import { afterEach, describe, expect, it, vi } from "vitest";
import { useExecutionPolicy } from "./useExecutionPolicy";
const capture = vi.hoisted(() => vi.fn());
vi.mock("../lib/sentry", () => ({ captureBrowserException: capture }));
function Policy({ value }: { value: unknown }) {
const result = useExecutionPolicy(value);
return {result.success ? "available" : "unavailable"};
}
afterEach(() => capture.mockClear());
describe("execution policy diagnostics", () => {
it("normalizes valid omissions quietly", () => {
const container = document.createElement("div");
const root = createRoot(container);
act(() => root.render());
expect(container.textContent).toBe("available");
expect(capture).not.toHaveBeenCalled();
act(() => root.unmount());
});
it("reports only a closed category once despite repeated rendering and refreshed objects", () => {
const container = document.createElement("div");
const root = createRoot(container);
const invalid = { stages: "synthetic-private-value", taskId: "synthetic-task-id", monitor: { notes: "synthetic-notes" } };
act(() => root.render());
act(() => root.render());
expect(container.textContent).toBe("unavailable");
expect(capture).toHaveBeenCalledTimes(1);
const [error, details] = capture.mock.calls[0];
expect(error).toBeInstanceOf(Error);
expect(error.message).toBe("Invalid task execution policy (stages)");
expect(error.cause).toBeUndefined();
expect(details).toBeUndefined();
expect(Object.keys(error)).toEqual([]);
expect(error.stack).not.toContain("synthetic-");
act(() => root.render());
expect(container.textContent).toBe("available");
act(() => root.render());
expect(capture).toHaveBeenCalledTimes(1);
act(() => root.unmount());
});
});