Files
openclaw/src/security/context-visibility.test.ts
2026-04-03 04:34:57 +09:00

96 lines
2.3 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
evaluateSupplementalContextVisibility,
filterSupplementalContextItems,
shouldIncludeSupplementalContext,
} from "./context-visibility.js";
describe("evaluateSupplementalContextVisibility", () => {
it("reports why all mode keeps context", () => {
expect(
evaluateSupplementalContextVisibility({
mode: "all",
kind: "history",
senderAllowed: false,
}),
).toEqual({
include: true,
reason: "mode_all",
});
});
it("reports quote override decisions", () => {
expect(
evaluateSupplementalContextVisibility({
mode: "allowlist_quote",
kind: "quote",
senderAllowed: false,
}),
).toEqual({
include: true,
reason: "quote_override",
});
});
});
describe("shouldIncludeSupplementalContext", () => {
it("keeps all context in all mode", () => {
expect(
shouldIncludeSupplementalContext({
mode: "all",
kind: "history",
senderAllowed: false,
}),
).toBe(true);
});
it("enforces allowlist mode for non-allowlisted senders", () => {
expect(
shouldIncludeSupplementalContext({
mode: "allowlist",
kind: "thread",
senderAllowed: false,
}),
).toBe(false);
});
it("keeps explicit quotes in allowlist_quote mode", () => {
expect(
shouldIncludeSupplementalContext({
mode: "allowlist_quote",
kind: "quote",
senderAllowed: false,
}),
).toBe(true);
});
it("still drops non-quote context in allowlist_quote mode", () => {
expect(
shouldIncludeSupplementalContext({
mode: "allowlist_quote",
kind: "history",
senderAllowed: false,
}),
).toBe(false);
});
});
describe("filterSupplementalContextItems", () => {
it("filters blocked items and reports omission count", () => {
const result = filterSupplementalContextItems({
items: [
{ id: "allowed", senderAllowed: true },
{ id: "blocked", senderAllowed: false },
],
mode: "allowlist",
kind: "thread",
isSenderAllowed: (item) => item.senderAllowed,
});
expect(result).toEqual({
items: [{ id: "allowed", senderAllowed: true }],
omitted: 1,
});
});
});