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" );
});
});
Messung V0.5 in Prozent C=99 H=98 G=98
¤ Dauer der Verarbeitung: 0.3 Sekunden
¤
*© Formatika GbR, Deutschland