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 );
});
});
Messung V0.5 in Prozent C=99 H=97 G=97
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-10)
¤
*© Formatika GbR, Deutschland