Files
openclaw/test/scripts/gh-read.test.ts
2026-04-08 00:09:07 +01:00

53 lines
1.7 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
buildReadPermissions,
normalizeRepo,
parsePermissionKeys,
parseRepoArg,
} from "../../scripts/gh-read.js";
describe("gh-read helpers", () => {
it("finds repo from gh args", () => {
expect(parseRepoArg(["pr", "view", "42", "-R", "openclaw/openclaw"])).toBe("openclaw/openclaw");
expect(parseRepoArg(["run", "list", "--repo=openclaw/docs"])).toBe("openclaw/docs");
expect(parseRepoArg(["pr", "view", "42"])).toBeNull();
});
it("normalizes repo strings from common git formats", () => {
expect(normalizeRepo("openclaw/openclaw")).toBe("openclaw/openclaw");
expect(normalizeRepo("github.com/openclaw/openclaw")).toBe("openclaw/openclaw");
expect(normalizeRepo("https://github.com/openclaw/openclaw.git")).toBe("openclaw/openclaw");
expect(normalizeRepo("git@github.com:openclaw/openclaw.git")).toBe("openclaw/openclaw");
expect(normalizeRepo("invalid")).toBeNull();
});
it("builds a read-only permission subset from granted permissions", () => {
expect(
buildReadPermissions(
{
actions: "write",
issues: "read",
administration: "write",
metadata: "read",
statuses: null,
},
["actions", "issues", "metadata", "statuses", "administration"],
),
).toEqual({
administration: "read",
actions: "read",
issues: "read",
metadata: "read",
});
});
it("parses permission key overrides", () => {
expect(parsePermissionKeys(undefined)).toContain("pull_requests");
expect(parsePermissionKeys("actions, contents ,issues")).toEqual([
"actions",
"contents",
"issues",
]);
});
});