Files
fusion/packages/dashboard/app/components/__tests__/AgentProvisioningPolicyEditor.test.tsx
Fusion 93f5a4cf1e feat(FN-4599): complete Step 3 — add provisioning policy editor
Fusion-Task-Id: FN-4599
Fusion-Task-Lineage: 39bdbfd4-d90a-4232-a447-23ef107732e4
2026-05-15 07:10:36 -07:00

58 lines
2.2 KiB
TypeScript

import { describe, expect, it, vi } from "vitest";
import { fireEvent, render, screen } from "@testing-library/react";
import { AGENT_PROVISIONING_APPROVAL_MODES, type ProjectSettings } from "@fusion/core";
import { AgentProvisioningPolicyEditor } from "../AgentProvisioningPolicyEditor";
describe("AgentProvisioningPolicyEditor", () => {
const baseValue: ProjectSettings["agentProvisioning"] = {
approvalMode: "trusted-only",
trustedRoles: ["reviewer"],
trustedAgentIds: ["agent-1"],
alwaysApproveDelete: true,
};
it("renders all approval mode options", () => {
render(<AgentProvisioningPolicyEditor value={baseValue} onChange={() => {}} />);
const optionValues = screen
.getAllByRole("option")
.map((option) => (option as HTMLOptionElement).value);
expect(optionValues).toEqual(AGENT_PROVISIONING_APPROVAL_MODES);
});
it("updates approval mode while preserving other fields", () => {
const onChange = vi.fn();
render(<AgentProvisioningPolicyEditor value={baseValue} onChange={onChange} />);
fireEvent.change(screen.getByLabelText("Approval mode"), { target: { value: "always" } });
expect(onChange).toHaveBeenLastCalledWith({ ...baseValue, approvalMode: "always" });
});
it("tokenizes trusted roles input", () => {
const onChange = vi.fn();
render(<AgentProvisioningPolicyEditor value={baseValue} onChange={onChange} />);
fireEvent.change(screen.getByLabelText("Trusted roles"), { target: { value: "reviewer, ceo" } });
expect(onChange).toHaveBeenLastCalledWith({ ...baseValue, trustedRoles: ["reviewer", "ceo"] });
});
it("round-trips alwaysApproveDelete", () => {
const onChange = vi.fn();
render(<AgentProvisioningPolicyEditor value={baseValue} onChange={onChange} />);
fireEvent.click(screen.getByLabelText("Always require approval for fn_agent_delete"));
expect(onChange).toHaveBeenLastCalledWith({ ...baseValue, alwaysApproveDelete: false });
});
it("references provisioning tool names in help copy", () => {
render(<AgentProvisioningPolicyEditor value={baseValue} onChange={() => {}} />);
expect(screen.getByText("fn_agent_create")).toBeInTheDocument();
expect(screen.getByText("fn_agent_delete")).toBeInTheDocument();
});
});