Files
Moltbot/src/config/runtime-group-policy.test.ts
2026-02-22 12:44:23 +01:00

102 lines
3.5 KiB
TypeScript

import { beforeEach, describe, expect, it } from "vitest";
import {
GROUP_POLICY_BLOCKED_LABEL,
resetMissingProviderGroupPolicyFallbackWarningsForTesting,
resolveAllowlistProviderRuntimeGroupPolicy,
resolveDefaultGroupPolicy,
resolveOpenProviderRuntimeGroupPolicy,
resolveRuntimeGroupPolicy,
warnMissingProviderGroupPolicyFallbackOnce,
} from "./runtime-group-policy.js";
beforeEach(() => {
resetMissingProviderGroupPolicyFallbackWarningsForTesting();
});
describe("resolveRuntimeGroupPolicy", () => {
it.each([
{
title: "fails closed when provider config is missing and no defaults are set",
params: { providerConfigPresent: false },
expectedPolicy: "allowlist",
expectedFallbackApplied: true,
},
{
title: "keeps configured fallback when provider config is present",
params: { providerConfigPresent: true, configuredFallbackPolicy: "open" as const },
expectedPolicy: "open",
expectedFallbackApplied: false,
},
{
title: "ignores global defaults when provider config is missing",
params: {
providerConfigPresent: false,
defaultGroupPolicy: "disabled" as const,
configuredFallbackPolicy: "open" as const,
missingProviderFallbackPolicy: "allowlist" as const,
},
expectedPolicy: "allowlist",
expectedFallbackApplied: true,
},
])("$title", ({ params, expectedPolicy, expectedFallbackApplied }) => {
const resolved = resolveRuntimeGroupPolicy(params);
expect(resolved.groupPolicy).toBe(expectedPolicy);
expect(resolved.providerMissingFallbackApplied).toBe(expectedFallbackApplied);
});
});
describe("resolveOpenProviderRuntimeGroupPolicy", () => {
it("uses open fallback when provider config exists", () => {
const resolved = resolveOpenProviderRuntimeGroupPolicy({
providerConfigPresent: true,
});
expect(resolved.groupPolicy).toBe("open");
expect(resolved.providerMissingFallbackApplied).toBe(false);
});
});
describe("resolveAllowlistProviderRuntimeGroupPolicy", () => {
it("uses allowlist fallback when provider config exists", () => {
const resolved = resolveAllowlistProviderRuntimeGroupPolicy({
providerConfigPresent: true,
});
expect(resolved.groupPolicy).toBe("allowlist");
expect(resolved.providerMissingFallbackApplied).toBe(false);
});
});
describe("resolveDefaultGroupPolicy", () => {
it("returns channels.defaults.groupPolicy when present", () => {
const resolved = resolveDefaultGroupPolicy({
channels: { defaults: { groupPolicy: "disabled" } },
});
expect(resolved).toBe("disabled");
});
});
describe("warnMissingProviderGroupPolicyFallbackOnce", () => {
it("logs only once per provider/account key", () => {
const lines: string[] = [];
const first = warnMissingProviderGroupPolicyFallbackOnce({
providerMissingFallbackApplied: true,
providerKey: "runtime-policy-test",
accountId: "account-a",
blockedLabel: GROUP_POLICY_BLOCKED_LABEL.room,
log: (message) => lines.push(message),
});
const second = warnMissingProviderGroupPolicyFallbackOnce({
providerMissingFallbackApplied: true,
providerKey: "runtime-policy-test",
accountId: "account-a",
blockedLabel: GROUP_POLICY_BLOCKED_LABEL.room,
log: (message) => lines.push(message),
});
expect(first).toBe(true);
expect(second).toBe(false);
expect(lines).toHaveLength(1);
expect(lines[0]).toContain("channels.runtime-policy-test is missing");
expect(lines[0]).toContain("room messages blocked");
});
});