openclaw/src/infra/outbound/channel-adapters.test.ts

49 lines
1.7 KiB
TypeScript

import { Separator, TextDisplay } from "@buape/carbon";
import { describe, expect, it } from "vitest";
import { DiscordUiContainer } from "../../discord/ui.js";
import { getChannelMessageAdapter } from "./channel-adapters.js";
describe("getChannelMessageAdapter", () => {
it("returns the default adapter for non-discord channels", () => {
expect(getChannelMessageAdapter("telegram")).toEqual({
supportsComponentsV2: false,
});
});
it("returns the discord adapter with a cross-context component builder", () => {
const adapter = getChannelMessageAdapter("discord");
expect(adapter.supportsComponentsV2).toBe(true);
expect(adapter.buildCrossContextComponents).toBeTypeOf("function");
const components = adapter.buildCrossContextComponents?.({
originLabel: "Telegram",
message: "Hello from chat",
cfg: {} as never,
accountId: "primary",
});
const container = components?.[0] as DiscordUiContainer | undefined;
expect(components).toHaveLength(1);
expect(container).toBeInstanceOf(DiscordUiContainer);
expect(container?.components).toEqual([
expect.any(TextDisplay),
expect.any(Separator),
expect.any(TextDisplay),
]);
});
it("omits the message body block when the cross-context message is blank", () => {
const adapter = getChannelMessageAdapter("discord");
const components = adapter.buildCrossContextComponents?.({
originLabel: "Signal",
message: " ",
cfg: {} as never,
});
const container = components?.[0] as DiscordUiContainer | undefined;
expect(components).toHaveLength(1);
expect(container?.components).toEqual([expect.any(TextDisplay)]);
});
});