From 208fb1aa354bfec61a2c2a1129f1965fc84ce3e3 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 10 Mar 2026 22:20:13 +0000 Subject: [PATCH] test: share runtime group policy fallback cases --- .../monitor/provider.group-policy.test.ts | 30 +++---------- .../monitor/provider.group-policy.test.ts | 32 ++++---------- .../monitor/provider.group-policy.test.ts | 32 ++++---------- .../group-access.group-policy.test.ts | 32 ++++---------- .../runtime-group-policy-contract.ts | 43 +++++++++++++++++++ .../access-control.group-policy.test.ts | 32 ++++---------- 6 files changed, 82 insertions(+), 119 deletions(-) create mode 100644 src/test-utils/runtime-group-policy-contract.ts diff --git a/src/discord/monitor/provider.group-policy.test.ts b/src/discord/monitor/provider.group-policy.test.ts index 48d4f67614a..9fe01fd0a31 100644 --- a/src/discord/monitor/provider.group-policy.test.ts +++ b/src/discord/monitor/provider.group-policy.test.ts @@ -1,21 +1,14 @@ import { describe, expect, it } from "vitest"; +import { installProviderRuntimeGroupPolicyFallbackSuite } from "../../test-utils/runtime-group-policy-contract.js"; import { __testing } from "./provider.js"; describe("resolveDiscordRuntimeGroupPolicy", () => { - it("fails closed when channels.discord is missing and no defaults are set", () => { - const resolved = __testing.resolveDiscordRuntimeGroupPolicy({ - providerConfigPresent: false, - }); - expect(resolved.groupPolicy).toBe("allowlist"); - expect(resolved.providerMissingFallbackApplied).toBe(true); - }); - - it("keeps open default when channels.discord is configured", () => { - const resolved = __testing.resolveDiscordRuntimeGroupPolicy({ - providerConfigPresent: true, - }); - expect(resolved.groupPolicy).toBe("open"); - expect(resolved.providerMissingFallbackApplied).toBe(false); + installProviderRuntimeGroupPolicyFallbackSuite({ + resolve: __testing.resolveDiscordRuntimeGroupPolicy, + configuredLabel: "keeps open default when channels.discord is configured", + defaultGroupPolicyUnderTest: "open", + missingConfigLabel: "fails closed when channels.discord is missing and no defaults are set", + missingDefaultLabel: "ignores explicit global defaults when provider config is missing", }); it("respects explicit provider policy", () => { @@ -26,13 +19,4 @@ describe("resolveDiscordRuntimeGroupPolicy", () => { expect(resolved.groupPolicy).toBe("disabled"); expect(resolved.providerMissingFallbackApplied).toBe(false); }); - - it("ignores explicit global defaults when provider config is missing", () => { - const resolved = __testing.resolveDiscordRuntimeGroupPolicy({ - providerConfigPresent: false, - defaultGroupPolicy: "open", - }); - expect(resolved.groupPolicy).toBe("allowlist"); - expect(resolved.providerMissingFallbackApplied).toBe(true); - }); }); diff --git a/src/imessage/monitor/provider.group-policy.test.ts b/src/imessage/monitor/provider.group-policy.test.ts index c28d7c10b4b..58812ad5711 100644 --- a/src/imessage/monitor/provider.group-policy.test.ts +++ b/src/imessage/monitor/provider.group-policy.test.ts @@ -1,29 +1,13 @@ -import { describe, expect, it } from "vitest"; +import { describe } from "vitest"; +import { installProviderRuntimeGroupPolicyFallbackSuite } from "../../test-utils/runtime-group-policy-contract.js"; import { __testing } from "./monitor-provider.js"; describe("resolveIMessageRuntimeGroupPolicy", () => { - it("fails closed when channels.imessage is missing and no defaults are set", () => { - const resolved = __testing.resolveIMessageRuntimeGroupPolicy({ - providerConfigPresent: false, - }); - expect(resolved.groupPolicy).toBe("allowlist"); - expect(resolved.providerMissingFallbackApplied).toBe(true); - }); - - it("keeps open fallback when channels.imessage is configured", () => { - const resolved = __testing.resolveIMessageRuntimeGroupPolicy({ - providerConfigPresent: true, - }); - expect(resolved.groupPolicy).toBe("open"); - expect(resolved.providerMissingFallbackApplied).toBe(false); - }); - - it("ignores explicit global defaults when provider config is missing", () => { - const resolved = __testing.resolveIMessageRuntimeGroupPolicy({ - providerConfigPresent: false, - defaultGroupPolicy: "disabled", - }); - expect(resolved.groupPolicy).toBe("allowlist"); - expect(resolved.providerMissingFallbackApplied).toBe(true); + installProviderRuntimeGroupPolicyFallbackSuite({ + resolve: __testing.resolveIMessageRuntimeGroupPolicy, + configuredLabel: "keeps open fallback when channels.imessage is configured", + defaultGroupPolicyUnderTest: "disabled", + missingConfigLabel: "fails closed when channels.imessage is missing and no defaults are set", + missingDefaultLabel: "ignores explicit global defaults when provider config is missing", }); }); diff --git a/src/slack/monitor/provider.group-policy.test.ts b/src/slack/monitor/provider.group-policy.test.ts index 29478d13e7a..e71e25eb565 100644 --- a/src/slack/monitor/provider.group-policy.test.ts +++ b/src/slack/monitor/provider.group-policy.test.ts @@ -1,29 +1,13 @@ -import { describe, expect, it } from "vitest"; +import { describe } from "vitest"; +import { installProviderRuntimeGroupPolicyFallbackSuite } from "../../test-utils/runtime-group-policy-contract.js"; import { __testing } from "./provider.js"; describe("resolveSlackRuntimeGroupPolicy", () => { - it("fails closed when channels.slack is missing and no defaults are set", () => { - const resolved = __testing.resolveSlackRuntimeGroupPolicy({ - providerConfigPresent: false, - }); - expect(resolved.groupPolicy).toBe("allowlist"); - expect(resolved.providerMissingFallbackApplied).toBe(true); - }); - - it("keeps open default when channels.slack is configured", () => { - const resolved = __testing.resolveSlackRuntimeGroupPolicy({ - providerConfigPresent: true, - }); - expect(resolved.groupPolicy).toBe("open"); - expect(resolved.providerMissingFallbackApplied).toBe(false); - }); - - it("ignores explicit global defaults when provider config is missing", () => { - const resolved = __testing.resolveSlackRuntimeGroupPolicy({ - providerConfigPresent: false, - defaultGroupPolicy: "open", - }); - expect(resolved.groupPolicy).toBe("allowlist"); - expect(resolved.providerMissingFallbackApplied).toBe(true); + installProviderRuntimeGroupPolicyFallbackSuite({ + resolve: __testing.resolveSlackRuntimeGroupPolicy, + configuredLabel: "keeps open default when channels.slack is configured", + defaultGroupPolicyUnderTest: "open", + missingConfigLabel: "fails closed when channels.slack is missing and no defaults are set", + missingDefaultLabel: "ignores explicit global defaults when provider config is missing", }); }); diff --git a/src/telegram/group-access.group-policy.test.ts b/src/telegram/group-access.group-policy.test.ts index 9374230e1b1..07e05780536 100644 --- a/src/telegram/group-access.group-policy.test.ts +++ b/src/telegram/group-access.group-policy.test.ts @@ -1,29 +1,13 @@ -import { describe, expect, it } from "vitest"; +import { describe } from "vitest"; +import { installProviderRuntimeGroupPolicyFallbackSuite } from "../test-utils/runtime-group-policy-contract.js"; import { resolveTelegramRuntimeGroupPolicy } from "./group-access.js"; describe("resolveTelegramRuntimeGroupPolicy", () => { - it("fails closed when channels.telegram is missing and no defaults are set", () => { - const resolved = resolveTelegramRuntimeGroupPolicy({ - providerConfigPresent: false, - }); - expect(resolved.groupPolicy).toBe("allowlist"); - expect(resolved.providerMissingFallbackApplied).toBe(true); - }); - - it("keeps open fallback when channels.telegram is configured", () => { - const resolved = resolveTelegramRuntimeGroupPolicy({ - providerConfigPresent: true, - }); - expect(resolved.groupPolicy).toBe("open"); - expect(resolved.providerMissingFallbackApplied).toBe(false); - }); - - it("ignores explicit defaults when provider config is missing", () => { - const resolved = resolveTelegramRuntimeGroupPolicy({ - providerConfigPresent: false, - defaultGroupPolicy: "disabled", - }); - expect(resolved.groupPolicy).toBe("allowlist"); - expect(resolved.providerMissingFallbackApplied).toBe(true); + installProviderRuntimeGroupPolicyFallbackSuite({ + resolve: resolveTelegramRuntimeGroupPolicy, + configuredLabel: "keeps open fallback when channels.telegram is configured", + defaultGroupPolicyUnderTest: "disabled", + missingConfigLabel: "fails closed when channels.telegram is missing and no defaults are set", + missingDefaultLabel: "ignores explicit defaults when provider config is missing", }); }); diff --git a/src/test-utils/runtime-group-policy-contract.ts b/src/test-utils/runtime-group-policy-contract.ts new file mode 100644 index 00000000000..65a0e0b8ef3 --- /dev/null +++ b/src/test-utils/runtime-group-policy-contract.ts @@ -0,0 +1,43 @@ +import { expect, it } from "vitest"; +import type { + ResolveProviderRuntimeGroupPolicyParams, + RuntimeGroupPolicyResolution, +} from "../config/runtime-group-policy.js"; +import type { GroupPolicy } from "../config/types.base.js"; + +type RuntimeGroupPolicyResolver = ( + params: ResolveProviderRuntimeGroupPolicyParams, +) => RuntimeGroupPolicyResolution; + +export function installProviderRuntimeGroupPolicyFallbackSuite(params: { + configuredLabel: string; + defaultGroupPolicyUnderTest: GroupPolicy; + missingConfigLabel: string; + missingDefaultLabel: string; + resolve: RuntimeGroupPolicyResolver; +}) { + it(params.missingConfigLabel, () => { + const resolved = params.resolve({ + providerConfigPresent: false, + }); + expect(resolved.groupPolicy).toBe("allowlist"); + expect(resolved.providerMissingFallbackApplied).toBe(true); + }); + + it(params.configuredLabel, () => { + const resolved = params.resolve({ + providerConfigPresent: true, + }); + expect(resolved.groupPolicy).toBe("open"); + expect(resolved.providerMissingFallbackApplied).toBe(false); + }); + + it(params.missingDefaultLabel, () => { + const resolved = params.resolve({ + providerConfigPresent: false, + defaultGroupPolicy: params.defaultGroupPolicyUnderTest, + }); + expect(resolved.groupPolicy).toBe("allowlist"); + expect(resolved.providerMissingFallbackApplied).toBe(true); + }); +} diff --git a/src/web/inbound/access-control.group-policy.test.ts b/src/web/inbound/access-control.group-policy.test.ts index 8419a1e5d7a..9b546f7a423 100644 --- a/src/web/inbound/access-control.group-policy.test.ts +++ b/src/web/inbound/access-control.group-policy.test.ts @@ -1,29 +1,13 @@ -import { describe, expect, it } from "vitest"; +import { describe } from "vitest"; +import { installProviderRuntimeGroupPolicyFallbackSuite } from "../../test-utils/runtime-group-policy-contract.js"; import { __testing } from "./access-control.js"; describe("resolveWhatsAppRuntimeGroupPolicy", () => { - it("fails closed when channels.whatsapp is missing and no defaults are set", () => { - const resolved = __testing.resolveWhatsAppRuntimeGroupPolicy({ - providerConfigPresent: false, - }); - expect(resolved.groupPolicy).toBe("allowlist"); - expect(resolved.providerMissingFallbackApplied).toBe(true); - }); - - it("keeps open fallback when channels.whatsapp is configured", () => { - const resolved = __testing.resolveWhatsAppRuntimeGroupPolicy({ - providerConfigPresent: true, - }); - expect(resolved.groupPolicy).toBe("open"); - expect(resolved.providerMissingFallbackApplied).toBe(false); - }); - - it("ignores explicit default policy when provider config is missing", () => { - const resolved = __testing.resolveWhatsAppRuntimeGroupPolicy({ - providerConfigPresent: false, - defaultGroupPolicy: "disabled", - }); - expect(resolved.groupPolicy).toBe("allowlist"); - expect(resolved.providerMissingFallbackApplied).toBe(true); + installProviderRuntimeGroupPolicyFallbackSuite({ + resolve: __testing.resolveWhatsAppRuntimeGroupPolicy, + configuredLabel: "keeps open fallback when channels.whatsapp is configured", + defaultGroupPolicyUnderTest: "disabled", + missingConfigLabel: "fails closed when channels.whatsapp is missing and no defaults are set", + missingDefaultLabel: "ignores explicit default policy when provider config is missing", }); });