Files
kandev/apps/web/lib/agent-permissions.test.ts
T
2026-02-19 22:18:01 +00:00

115 lines
3.4 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
profileToPermissionsMap,
permissionsToProfilePatch,
buildDefaultPermissions,
arePermissionsDirty,
} from "./agent-permissions";
import type { PermissionSetting } from "@/lib/types/http";
const mockSettings: Record<string, PermissionSetting> = {
auto_approve: { supported: true, default: true, label: "Auto approve", description: "" },
dangerously_skip_permissions: {
supported: true,
default: false,
label: "Skip perms",
description: "",
},
allow_indexing: { supported: true, default: true, label: "Indexing", description: "" },
};
describe("profileToPermissionsMap", () => {
it("uses profile values when present", () => {
const result = profileToPermissionsMap(
{ auto_approve: false, dangerously_skip_permissions: true, allow_indexing: false },
mockSettings,
);
expect(result).toEqual({
auto_approve: false,
dangerously_skip_permissions: true,
allow_indexing: false,
});
});
it("falls back to setting defaults for missing keys", () => {
const result = profileToPermissionsMap({}, mockSettings);
expect(result).toEqual({
auto_approve: true,
dangerously_skip_permissions: false,
allow_indexing: true,
});
});
it("falls back to false when setting is also missing", () => {
const result = profileToPermissionsMap({}, {});
expect(result).toEqual({
auto_approve: false,
dangerously_skip_permissions: false,
allow_indexing: false,
});
});
});
describe("permissionsToProfilePatch", () => {
it("returns all permission keys with values", () => {
const result = permissionsToProfilePatch({
auto_approve: true,
dangerously_skip_permissions: true,
allow_indexing: true,
});
expect(result).toEqual({
auto_approve: true,
dangerously_skip_permissions: true,
allow_indexing: true,
});
});
it("defaults missing keys to false", () => {
const result = permissionsToProfilePatch({});
expect(result).toEqual({
auto_approve: false,
dangerously_skip_permissions: false,
allow_indexing: false,
});
});
});
describe("buildDefaultPermissions", () => {
it("builds defaults from permission settings", () => {
const result = buildDefaultPermissions(mockSettings);
expect(result).toEqual({
auto_approve: true,
dangerously_skip_permissions: false,
allow_indexing: true,
});
});
it("defaults to false for missing settings", () => {
const result = buildDefaultPermissions({});
expect(result).toEqual({
auto_approve: false,
dangerously_skip_permissions: false,
allow_indexing: false,
});
});
});
describe("arePermissionsDirty", () => {
it("returns false when all permissions match", () => {
const a = { auto_approve: true, dangerously_skip_permissions: false, allow_indexing: true };
expect(arePermissionsDirty(a, { ...a })).toBe(false);
});
it("returns true when any permission differs", () => {
const a = { auto_approve: true, dangerously_skip_permissions: false, allow_indexing: true };
const b = { auto_approve: true, dangerously_skip_permissions: true, allow_indexing: true };
expect(arePermissionsDirty(a, b)).toBe(true);
});
it("detects difference when one side has undefined", () => {
const a = { auto_approve: true };
const b = { auto_approve: false };
expect(arePermissionsDirty(a, b)).toBe(true);
});
});