Files
claw3d/tests/unit/agentPermissionsOperation.test.ts
T
Luke The Dev 4fa4f13558 First Release of Claw3D (#11)
Co-authored-by: iamlukethedev <iamlukethedev@users.noreply.github.com>
2026-03-19 23:14:04 -05:00

115 lines
3.4 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
isPermissionsCustom,
resolveAgentPermissionsDraft,
resolveCommandModeFromRole,
resolvePresetDefaultsForRole,
resolveRoleForCommandMode,
resolveToolGroupOverrides,
resolveToolGroupStateFromConfigEntry,
} from "@/features/agents/operations/agentPermissionsOperation";
describe("agentPermissionsOperation", () => {
it("maps command mode and preset role in both directions", () => {
expect(resolveRoleForCommandMode("off")).toBe("conservative");
expect(resolveRoleForCommandMode("ask")).toBe("collaborative");
expect(resolveRoleForCommandMode("auto")).toBe("autonomous");
expect(resolveCommandModeFromRole("conservative")).toBe("off");
expect(resolveCommandModeFromRole("collaborative")).toBe("ask");
expect(resolveCommandModeFromRole("autonomous")).toBe("auto");
});
it("resolves autonomous preset defaults to permissive capabilities", () => {
expect(resolvePresetDefaultsForRole("autonomous")).toEqual({
commandMode: "auto",
webAccess: true,
fileTools: true,
});
});
it("derives tool-group state from allow and deny with deny precedence", () => {
const state = resolveToolGroupStateFromConfigEntry({
allow: ["group:web", "group:runtime"],
deny: ["group:web"],
});
expect(state.usesAllow).toBe(true);
expect(state.runtime).toBe(true);
expect(state.web).toBe(false);
expect(state.fs).toBeNull();
});
it("merges group toggles while preserving allow mode", () => {
const overrides = resolveToolGroupOverrides({
existingTools: {
allow: ["group:web", "custom:tool"],
deny: ["group:runtime", "group:fs"],
},
runtimeEnabled: true,
webEnabled: false,
fsEnabled: true,
});
expect(overrides.tools.allow).toEqual(
expect.arrayContaining(["custom:tool", "group:runtime", "group:fs"])
);
expect(overrides.tools.allow).not.toEqual(expect.arrayContaining(["group:web"]));
expect(overrides.tools.deny).toEqual(expect.arrayContaining(["group:web"]));
expect(overrides.tools.deny).not.toEqual(
expect.arrayContaining(["group:runtime", "group:fs"])
);
});
it("merges group toggles while preserving alsoAllow mode", () => {
const overrides = resolveToolGroupOverrides({
existingTools: {
alsoAllow: ["group:web"],
deny: [],
},
runtimeEnabled: true,
webEnabled: true,
fsEnabled: false,
});
expect(overrides.tools).not.toHaveProperty("allow");
expect(overrides.tools.alsoAllow).toEqual(
expect.arrayContaining(["group:web", "group:runtime"])
);
expect(overrides.tools.deny).toEqual(expect.arrayContaining(["group:fs"]));
});
it("resolves draft from session role and config group overrides", () => {
const draft = resolveAgentPermissionsDraft({
agent: {
sessionExecSecurity: "allowlist",
sessionExecAsk: "always",
},
existingTools: {
allow: ["group:web"],
deny: ["group:fs"],
},
});
expect(draft).toEqual({
commandMode: "ask",
webAccess: true,
fileTools: false,
});
});
it("flags custom draft when advanced values diverge from preset baseline", () => {
expect(
isPermissionsCustom({
role: "autonomous",
draft: {
commandMode: "auto",
webAccess: false,
fileTools: true,
},
})
).toBe(true);
});
});