





















@@ -23,6 +23,15 @@ import {
2323requiresExecApproval,
2424} from "./exec-approvals.js";
252526+function expectFields(value: unknown, expected: Record<string, unknown>): void {
27+expect(value).toBeTypeOf("object");
28+expect(value).not.toBeNull();
29+const record = value as Record<string, unknown>;
30+for (const [key, expectedValue] of Object.entries(expected)) {
31+expect(record[key], key).toEqual(expectedValue);
32+}
33+}
34+2635function expectMalformedAgentAskUsesDefaults(agentAsk: unknown): void {
2736const approvals = {
2837version: 1,
@@ -45,7 +54,7 @@ function expectMalformedAgentAskUsesDefaults(agentAsk: unknown): void {
4554agentId: "runner",
4655});
475648-expect(summary.ask).toMatchObject({
57+expectFields(summary.ask, {
4958requested: "off",
5059host: "always",
5160hostSource: "~/.openclaw/exec-approvals.json defaults.ask",
@@ -241,10 +250,9 @@ describe("exec approvals policy helpers", () => {
241250});
242251243252expect(result.allowlistSatisfied).toBe(false);
244-expect(result.segmentAllowlistEntries).toEqual([
245-expect.objectContaining({ pattern: "/usr/bin/echo" }),
246-null,
247-]);
253+expect(result.segmentAllowlistEntries).toHaveLength(2);
254+expectFields(result.segmentAllowlistEntries[0], { pattern: "/usr/bin/echo" });
255+expect(result.segmentAllowlistEntries[1]).toBeNull();
248256expect(
249257hasDurableExecApproval({
250258analysisOk: true,
@@ -272,14 +280,14 @@ describe("exec approvals policy helpers", () => {
272280scopeLabel: "tools.exec",
273281});
274282275-expect(summary.security).toMatchObject({
283+expectFields(summary.security, {
276284requested: "full",
277285host: "allowlist",
278286effective: "allowlist",
279287hostSource: "~/.openclaw/exec-approvals.json defaults.security",
280288note: "stricter host security wins",
281289});
282-expect(summary.ask).toMatchObject({
290+expectFields(summary.ask, {
283291requested: "off",
284292host: "always",
285293effective: "always",
@@ -334,7 +342,7 @@ describe("exec approvals policy helpers", () => {
334342scopeLabel: "tools.exec",
335343});
336344337-expect(summary.ask).toMatchObject({
345+expectFields(summary.ask, {
338346requested: "always",
339347host: "off",
340348effective: "always",
@@ -404,11 +412,11 @@ describe("exec approvals policy helpers", () => {
404412agentId: "runner",
405413});
406414407-expect(summary.security).toMatchObject({
415+expectFields(summary.security, {
408416host: "allowlist",
409417hostSource: "~/.openclaw/exec-approvals.json agents.*.security",
410418});
411-expect(summary.ask).toMatchObject({
419+expectFields(summary.ask, {
412420host: "always",
413421hostSource: "~/.openclaw/exec-approvals.json agents.*.ask",
414422});
@@ -438,13 +446,13 @@ describe("exec approvals policy helpers", () => {
438446agentId: "runner",
439447});
440448441-expect(summary.security).toMatchObject({
449+expectFields(summary.security, {
442450requested: "full",
443451requestedSource: "tools.exec.security",
444452host: "allowlist",
445453effective: "allowlist",
446454});
447-expect(summary.ask).toMatchObject({
455+expectFields(summary.ask, {
448456requested: "off",
449457requestedSource: "tools.exec.ask",
450458host: "always",
@@ -499,13 +507,13 @@ describe("exec approvals policy helpers", () => {
499507"agent:batch",
500508"agent:runner",
501509]);
502-expect(snapshots[1]?.ask).toMatchObject({
510+expectFields(snapshots[1]?.ask, {
503511requested: "off",
504512requestedSource: "tools.exec.ask",
505513host: "always",
506514effective: "always",
507515});
508-expect(snapshots[2]?.security).toMatchObject({
516+expectFields(snapshots[2]?.security, {
509517requested: "full",
510518requestedSource: "tools.exec.security",
511519host: "allowlist",
@@ -535,11 +543,11 @@ describe("exec approvals policy helpers", () => {
535543});
536544537545expect(snapshots.map((snapshot) => snapshot.scopeLabel)).toEqual(["tools.exec"]);
538-expect(snapshots[0]?.security).toMatchObject({
546+expectFields(snapshots[0]?.security, {
539547host: "allowlist",
540548hostSource: "~/.openclaw/exec-approvals.json agents.main.security",
541549});
542-expect(snapshots[0]?.ask).toMatchObject({
550+expectFields(snapshots[0]?.ask, {
543551host: "always",
544552hostSource: "~/.openclaw/exec-approvals.json agents.main.ask",
545553});
@@ -573,7 +581,7 @@ describe("exec approvals policy helpers", () => {
573581});
574582575583expect(snapshots.map((snapshot) => snapshot.scopeLabel)).toEqual(["tools.exec", "agent:main"]);
576-expect(snapshots[1]?.ask).toMatchObject({
584+expectFields(snapshots[1]?.ask, {
577585requested: "always",
578586requestedSource: "agents.list.main.tools.exec.ask",
579587});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。