mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-27 09:02:15 +00:00
111 lines
3.4 KiB
TypeScript
111 lines
3.4 KiB
TypeScript
import { beforeEach, describe, expect, it } from "vitest";
|
|
import { setActivePluginRegistry } from "../../plugins/runtime.js";
|
|
import { createTestRegistry } from "../../test-utils/channel-plugins.js";
|
|
import { resolveAnnounceTargetFromKey } from "./sessions-send-helpers.js";
|
|
|
|
describe("resolveAnnounceTargetFromKey", () => {
|
|
beforeEach(() => {
|
|
setActivePluginRegistry(
|
|
createTestRegistry([
|
|
{
|
|
pluginId: "discord",
|
|
source: "test",
|
|
plugin: {
|
|
id: "discord",
|
|
meta: {
|
|
id: "discord",
|
|
label: "Discord",
|
|
selectionLabel: "Discord",
|
|
docsPath: "/channels/discord",
|
|
blurb: "Discord test stub.",
|
|
},
|
|
capabilities: { chatTypes: ["direct", "channel", "thread"] },
|
|
messaging: {
|
|
resolveSessionTarget: ({ id }: { id: string }) => `channel:${id}`,
|
|
},
|
|
config: {
|
|
listAccountIds: () => ["default"],
|
|
resolveAccount: () => ({}),
|
|
},
|
|
},
|
|
},
|
|
{
|
|
pluginId: "slack",
|
|
source: "test",
|
|
plugin: {
|
|
id: "slack",
|
|
meta: {
|
|
id: "slack",
|
|
label: "Slack",
|
|
selectionLabel: "Slack",
|
|
docsPath: "/channels/slack",
|
|
blurb: "Slack test stub.",
|
|
},
|
|
capabilities: { chatTypes: ["direct", "channel", "thread"] },
|
|
messaging: {
|
|
resolveSessionTarget: ({ id }: { id: string }) => `channel:${id}`,
|
|
},
|
|
config: {
|
|
listAccountIds: () => ["default"],
|
|
resolveAccount: () => ({}),
|
|
},
|
|
},
|
|
},
|
|
{
|
|
pluginId: "telegram",
|
|
source: "test",
|
|
plugin: {
|
|
id: "telegram",
|
|
meta: {
|
|
id: "telegram",
|
|
label: "Telegram",
|
|
selectionLabel: "Telegram",
|
|
docsPath: "/channels/telegram",
|
|
blurb: "Telegram test stub.",
|
|
},
|
|
capabilities: { chatTypes: ["direct", "group", "thread"] },
|
|
messaging: {
|
|
normalizeTarget: (raw: string) => raw.replace(/^group:/, ""),
|
|
},
|
|
config: {
|
|
listAccountIds: () => ["default"],
|
|
resolveAccount: () => ({}),
|
|
},
|
|
},
|
|
},
|
|
]),
|
|
);
|
|
});
|
|
|
|
it("lets plugins own session-derived target shapes", () => {
|
|
expect(resolveAnnounceTargetFromKey("agent:main:discord:group:dev")).toEqual({
|
|
channel: "discord",
|
|
to: "channel:dev",
|
|
threadId: undefined,
|
|
});
|
|
expect(resolveAnnounceTargetFromKey("agent:main:slack:group:C123")).toEqual({
|
|
channel: "slack",
|
|
to: "channel:C123",
|
|
threadId: undefined,
|
|
});
|
|
});
|
|
|
|
it("keeps generic topic extraction and plugin normalization for other channels", () => {
|
|
expect(resolveAnnounceTargetFromKey("agent:main:telegram:group:-100123:topic:99")).toEqual({
|
|
channel: "telegram",
|
|
to: "-100123",
|
|
threadId: "99",
|
|
});
|
|
});
|
|
|
|
it("preserves decimal thread ids for Slack-style session keys", () => {
|
|
expect(
|
|
resolveAnnounceTargetFromKey("agent:main:slack:channel:general:thread:1699999999.0001"),
|
|
).toEqual({
|
|
channel: "slack",
|
|
to: "channel:general",
|
|
threadId: "1699999999.0001",
|
|
});
|
|
});
|
|
});
|