mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-09 16:14:31 +00:00
test(exec-approvals): cover v1 binding precedence and mismatch mapping
This commit is contained in:
@@ -164,4 +164,56 @@ describe("evaluateSystemRunApprovalMatch", () => {
|
|||||||
}
|
}
|
||||||
expect(result.code).toBe("APPROVAL_REQUEST_MISMATCH");
|
expect(result.code).toBe("APPROVAL_REQUEST_MISMATCH");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("prefers v1 binding over legacy command text fields", () => {
|
||||||
|
const result = evaluateSystemRunApprovalMatch({
|
||||||
|
cmdText: "echo SAFE",
|
||||||
|
argv: ["echo", "SAFE"],
|
||||||
|
request: {
|
||||||
|
host: "node",
|
||||||
|
// Intentionally stale legacy fields; v1 should be authoritative.
|
||||||
|
command: "echo STALE",
|
||||||
|
commandArgv: ["echo STALE"],
|
||||||
|
systemRunBindingV1: buildSystemRunApprovalBindingV1({
|
||||||
|
argv: ["echo", "SAFE"],
|
||||||
|
cwd: null,
|
||||||
|
agentId: null,
|
||||||
|
sessionKey: null,
|
||||||
|
}).binding,
|
||||||
|
},
|
||||||
|
binding: {
|
||||||
|
cwd: null,
|
||||||
|
agentId: null,
|
||||||
|
sessionKey: null,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
expect(result).toEqual({ ok: true });
|
||||||
|
});
|
||||||
|
|
||||||
|
test("rejects v1 mismatch even when legacy command text matches", () => {
|
||||||
|
const result = evaluateSystemRunApprovalMatch({
|
||||||
|
cmdText: "echo SAFE",
|
||||||
|
argv: ["echo", "SAFE"],
|
||||||
|
request: {
|
||||||
|
host: "node",
|
||||||
|
command: "echo SAFE",
|
||||||
|
systemRunBindingV1: buildSystemRunApprovalBindingV1({
|
||||||
|
argv: ["echo SAFE"],
|
||||||
|
cwd: null,
|
||||||
|
agentId: null,
|
||||||
|
sessionKey: null,
|
||||||
|
}).binding,
|
||||||
|
},
|
||||||
|
binding: {
|
||||||
|
cwd: null,
|
||||||
|
agentId: null,
|
||||||
|
sessionKey: null,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
expect(result.ok).toBe(false);
|
||||||
|
if (result.ok) {
|
||||||
|
throw new Error("unreachable");
|
||||||
|
}
|
||||||
|
expect(result.code).toBe("APPROVAL_REQUEST_MISMATCH");
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import {
|
|||||||
buildSystemRunApprovalEnvBinding,
|
buildSystemRunApprovalEnvBinding,
|
||||||
matchSystemRunApprovalBindingV1,
|
matchSystemRunApprovalBindingV1,
|
||||||
matchSystemRunApprovalEnvHash,
|
matchSystemRunApprovalEnvHash,
|
||||||
|
toSystemRunApprovalMismatchError,
|
||||||
} from "./system-run-approval-binding.js";
|
} from "./system-run-approval-binding.js";
|
||||||
|
|
||||||
describe("buildSystemRunApprovalEnvBinding", () => {
|
describe("buildSystemRunApprovalEnvBinding", () => {
|
||||||
@@ -99,3 +100,32 @@ describe("matchSystemRunApprovalBindingV1", () => {
|
|||||||
expect(result.code).toBe("APPROVAL_ENV_MISMATCH");
|
expect(result.code).toBe("APPROVAL_ENV_MISMATCH");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe("toSystemRunApprovalMismatchError", () => {
|
||||||
|
test("includes runId/code and preserves mismatch details", () => {
|
||||||
|
const result = toSystemRunApprovalMismatchError({
|
||||||
|
runId: "approval-123",
|
||||||
|
match: {
|
||||||
|
ok: false,
|
||||||
|
code: "APPROVAL_ENV_MISMATCH",
|
||||||
|
message: "approval id env binding mismatch",
|
||||||
|
details: {
|
||||||
|
envKeys: ["SAFE_A"],
|
||||||
|
expectedEnvHash: "expected-hash",
|
||||||
|
actualEnvHash: "actual-hash",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
expect(result).toEqual({
|
||||||
|
ok: false,
|
||||||
|
message: "approval id env binding mismatch",
|
||||||
|
details: {
|
||||||
|
code: "APPROVAL_ENV_MISMATCH",
|
||||||
|
runId: "approval-123",
|
||||||
|
envKeys: ["SAFE_A"],
|
||||||
|
expectedEnvHash: "expected-hash",
|
||||||
|
actualEnvHash: "actual-hash",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user