| |
| |
| |
| import { describe, expect, it } from "vitest"; |
| import type { OpenClawConfig } from "../config/types.openclaw.js"; |
| import { |
| expandAllowFromWithAccessGroups, |
| resolveAccessGroupAllowFromState, |
| } from "./access-groups.js"; |
|
|
| describe("access group allowlists", () => { |
| it("reports static, missing, unsupported, failed, and compatibility expansion states", async () => { |
| const cfg = { |
| accessGroups: { |
| admins: { type: "message.senders", members: { "*": ["global"], test: ["local"] } }, |
| audience: { type: "discord.channelAudience", guildId: "guild-1", channelId: "channel-1" }, |
| }, |
| } as OpenClawConfig; |
|
|
| const staticState = await resolveAccessGroupAllowFromState({ |
| accessGroups: cfg.accessGroups, |
| allowFrom: ["accessGroup:admins", "accessGroup:missing", "accessGroup:audience"], |
| channel: "test", |
| accountId: "default", |
| senderId: "local", |
| isSenderAllowed: (senderId, allowFrom) => allowFrom.includes(senderId), |
| }); |
| expect(staticState.referenced).toEqual(["admins", "missing", "audience"]); |
| expect(staticState.matched).toEqual(["admins"]); |
| expect(staticState.missing).toEqual(["missing"]); |
| expect(staticState.unsupported).toEqual(["audience"]); |
| expect(staticState.failed).toEqual([]); |
| expect(staticState.matchedAllowFromEntries).toEqual(["accessGroup:admins"]); |
| expect(staticState.hasReferences).toBe(true); |
| expect(staticState.hasMatch).toBe(true); |
|
|
| const failedState = await resolveAccessGroupAllowFromState({ |
| accessGroups: cfg.accessGroups, |
| allowFrom: ["accessGroup:audience"], |
| channel: "discord", |
| accountId: "default", |
| senderId: "discord:123", |
| resolveMembership: async () => { |
| throw new Error("discord lookup failed"); |
| }, |
| }); |
| expect(failedState.referenced).toEqual(["audience"]); |
| expect(failedState.failed).toEqual(["audience"]); |
| expect(failedState.hasMatch).toBe(false); |
|
|
| await expect( |
| expandAllowFromWithAccessGroups({ |
| cfg, |
| allowFrom: ["accessGroup:admins"], |
| channel: "test", |
| accountId: "default", |
| senderId: "local", |
| isSenderAllowed: (senderId, allowFrom) => allowFrom.includes(senderId), |
| }), |
| ).resolves.toEqual(["accessGroup:admins", "local"]); |
| }); |
| }); |
|
|