mirror of
https://bitbucket.org/siakitem/my-pi.git
synced 2026-08-28 08:35:57 +00:00
104 lines
3.5 KiB
TypeScript
104 lines
3.5 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import { SessionApproval } from "#src/session-approval";
|
|
|
|
describe("SessionApproval", () => {
|
|
describe("single", () => {
|
|
it("stores surface and one pattern", () => {
|
|
const approval = SessionApproval.single("bash", "git *");
|
|
expect(approval.surface).toBe("bash");
|
|
expect(approval.patterns).toEqual(["git *"]);
|
|
});
|
|
|
|
it("representativePattern returns the pattern", () => {
|
|
const approval = SessionApproval.single("bash", "git *");
|
|
expect(approval.representativePattern).toBe("git *");
|
|
});
|
|
|
|
it("toGateApproval returns { surface, pattern }", () => {
|
|
const approval = SessionApproval.single("bash", "git *");
|
|
expect(approval.toGateApproval()).toEqual({
|
|
surface: "bash",
|
|
pattern: "git *",
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("multiple", () => {
|
|
it("stores surface and all patterns", () => {
|
|
const approval = SessionApproval.multiple("external_directory", [
|
|
"/outside/a/*",
|
|
"/outside/b/*",
|
|
]);
|
|
expect(approval.surface).toBe("external_directory");
|
|
expect(approval.patterns).toEqual(["/outside/a/*", "/outside/b/*"]);
|
|
});
|
|
|
|
it("representativePattern returns the first pattern", () => {
|
|
const approval = SessionApproval.multiple("external_directory", [
|
|
"/outside/a/*",
|
|
"/outside/b/*",
|
|
]);
|
|
expect(approval.representativePattern).toBe("/outside/a/*");
|
|
});
|
|
|
|
it("toGateApproval returns { surface, pattern } using the first pattern", () => {
|
|
const approval = SessionApproval.multiple("external_directory", [
|
|
"/outside/a/*",
|
|
"/outside/b/*",
|
|
]);
|
|
expect(approval.toGateApproval()).toEqual({
|
|
surface: "external_directory",
|
|
pattern: "/outside/a/*",
|
|
});
|
|
});
|
|
|
|
it("defensive copy — mutating the source array does not affect patterns", () => {
|
|
const source = ["/outside/a/*", "/outside/b/*"];
|
|
const approval = SessionApproval.multiple("external_directory", source);
|
|
source.push("/outside/c/*");
|
|
expect(approval.patterns).toEqual(["/outside/a/*", "/outside/b/*"]);
|
|
});
|
|
});
|
|
|
|
describe("empty patterns (degenerate case)", () => {
|
|
it("representativePattern returns undefined", () => {
|
|
const approval = SessionApproval.multiple("external_directory", []);
|
|
expect(approval.representativePattern).toBeUndefined();
|
|
});
|
|
|
|
it("toGateApproval returns undefined", () => {
|
|
const approval = SessionApproval.multiple("external_directory", []);
|
|
expect(approval.toGateApproval()).toBeUndefined();
|
|
});
|
|
});
|
|
|
|
describe("toForwardedData", () => {
|
|
it("returns surface and all patterns for a single approval", () => {
|
|
const approval = SessionApproval.single("bash", "git *");
|
|
expect(approval.toForwardedData()).toEqual({
|
|
surface: "bash",
|
|
patterns: ["git *"],
|
|
});
|
|
});
|
|
|
|
it("returns surface and all patterns for a multiple approval", () => {
|
|
const approval = SessionApproval.multiple("external_directory", [
|
|
"/outside/a/*",
|
|
"/outside/b/*",
|
|
]);
|
|
expect(approval.toForwardedData()).toEqual({
|
|
surface: "external_directory",
|
|
patterns: ["/outside/a/*", "/outside/b/*"],
|
|
});
|
|
});
|
|
|
|
it("defensive copy — mutating the result patterns does not affect the approval", () => {
|
|
const approval = SessionApproval.single("bash", "git *");
|
|
const data = approval.toForwardedData();
|
|
(data.patterns as string[]).push("rm *");
|
|
expect(approval.patterns).toEqual(["git *"]);
|
|
});
|
|
});
|
|
});
|