Download src/channels/command-gating.test.ts from SaylorTwift/openclaw: direct link, hf CLI and curl.
- Browser
- Download file 3.52 kB
-
https://huggingface.co/SaylorTwift/openclaw/resolve/main/src/channels/command-gating.test.ts
- Command line
-
hf download hf://SaylorTwift/openclaw/src/channels/command-gating.test.ts
-
curl -L -o command-gating.test.ts https://huggingface.co/SaylorTwift/openclaw/resolve/main/src/channels/command-gating.test.ts
3.52 kB
| // Command gating tests cover channel command allow/deny decisions before agent dispatch. | |
| import { describe, expect, it } from "vitest"; | |
| import { | |
| resolveCommandAuthorizedFromAuthorizers, | |
| resolveControlCommandGate, | |
| resolveDualTextControlCommandGate, | |
| } from "./command-gating.js"; | |
| describe("resolveCommandAuthorizedFromAuthorizers", () => { | |
| it("denies when useAccessGroups is enabled and no authorizer is configured", () => { | |
| expect( | |
| resolveCommandAuthorizedFromAuthorizers({ | |
| useAccessGroups: true, | |
| authorizers: [{ configured: false, allowed: true }], | |
| }), | |
| ).toBe(false); | |
| }); | |
| it("allows when useAccessGroups is enabled and any configured authorizer allows", () => { | |
| expect( | |
| resolveCommandAuthorizedFromAuthorizers({ | |
| useAccessGroups: true, | |
| authorizers: [ | |
| { configured: true, allowed: false }, | |
| { configured: true, allowed: true }, | |
| ], | |
| }), | |
| ).toBe(true); | |
| }); | |
| it("allows when useAccessGroups is disabled (default)", () => { | |
| expect( | |
| resolveCommandAuthorizedFromAuthorizers({ | |
| useAccessGroups: false, | |
| authorizers: [{ configured: true, allowed: false }], | |
| }), | |
| ).toBe(true); | |
| }); | |
| it("honors modeWhenAccessGroupsOff=deny", () => { | |
| expect( | |
| resolveCommandAuthorizedFromAuthorizers({ | |
| useAccessGroups: false, | |
| authorizers: [{ configured: false, allowed: true }], | |
| modeWhenAccessGroupsOff: "deny", | |
| }), | |
| ).toBe(false); | |
| }); | |
| it("honors modeWhenAccessGroupsOff=configured (allow when none configured)", () => { | |
| expect( | |
| resolveCommandAuthorizedFromAuthorizers({ | |
| useAccessGroups: false, | |
| authorizers: [{ configured: false, allowed: false }], | |
| modeWhenAccessGroupsOff: "configured", | |
| }), | |
| ).toBe(true); | |
| }); | |
| it("honors modeWhenAccessGroupsOff=configured (enforce when configured)", () => { | |
| expect( | |
| resolveCommandAuthorizedFromAuthorizers({ | |
| useAccessGroups: false, | |
| authorizers: [{ configured: true, allowed: false }], | |
| modeWhenAccessGroupsOff: "configured", | |
| }), | |
| ).toBe(false); | |
| expect( | |
| resolveCommandAuthorizedFromAuthorizers({ | |
| useAccessGroups: false, | |
| authorizers: [{ configured: true, allowed: true }], | |
| modeWhenAccessGroupsOff: "configured", | |
| }), | |
| ).toBe(true); | |
| }); | |
| }); | |
| describe("resolveControlCommandGate", () => { | |
| it("blocks control commands when unauthorized", () => { | |
| const result = resolveControlCommandGate({ | |
| useAccessGroups: true, | |
| authorizers: [{ configured: true, allowed: false }], | |
| allowTextCommands: true, | |
| hasControlCommand: true, | |
| }); | |
| expect(result.commandAuthorized).toBe(false); | |
| expect(result.shouldBlock).toBe(true); | |
| }); | |
| it("does not block when control commands are disabled", () => { | |
| const result = resolveControlCommandGate({ | |
| useAccessGroups: true, | |
| authorizers: [{ configured: true, allowed: false }], | |
| allowTextCommands: false, | |
| hasControlCommand: true, | |
| }); | |
| expect(result.shouldBlock).toBe(false); | |
| }); | |
| it("supports the dual-authorizer text gate helper", () => { | |
| const result = resolveDualTextControlCommandGate({ | |
| useAccessGroups: true, | |
| primaryConfigured: true, | |
| primaryAllowed: false, | |
| secondaryConfigured: true, | |
| secondaryAllowed: true, | |
| hasControlCommand: true, | |
| }); | |
| expect(result.commandAuthorized).toBe(true); | |
| expect(result.shouldBlock).toBe(false); | |
| }); | |
| }); | |