106 lines
3.1 KiB
TypeScript
106 lines
3.1 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
|
|
import { createTestRegistry } from "../../test-utils/channel-plugins.js";
|
|
|
|
const callGatewayMock = vi.fn();
|
|
vi.mock("../../gateway/call.js", () => ({
|
|
callGateway: (opts: unknown) => callGatewayMock(opts),
|
|
}));
|
|
|
|
const loadResolveAnnounceTarget = async () => await import("./sessions-announce-target.js");
|
|
|
|
const installRegistry = async () => {
|
|
const { setActivePluginRegistry } = await import("../../plugins/runtime.js");
|
|
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"] },
|
|
config: {
|
|
listAccountIds: () => ["default"],
|
|
resolveAccount: () => ({}),
|
|
},
|
|
},
|
|
},
|
|
{
|
|
pluginId: "whatsapp",
|
|
source: "test",
|
|
plugin: {
|
|
id: "whatsapp",
|
|
meta: {
|
|
id: "whatsapp",
|
|
label: "WhatsApp",
|
|
selectionLabel: "WhatsApp",
|
|
docsPath: "/channels/whatsapp",
|
|
blurb: "WhatsApp test stub.",
|
|
preferSessionLookupForAnnounceTarget: true,
|
|
},
|
|
capabilities: { chatTypes: ["direct", "group"] },
|
|
config: {
|
|
listAccountIds: () => ["default"],
|
|
resolveAccount: () => ({}),
|
|
},
|
|
},
|
|
},
|
|
]),
|
|
);
|
|
};
|
|
|
|
describe("resolveAnnounceTarget", () => {
|
|
beforeEach(async () => {
|
|
callGatewayMock.mockReset();
|
|
vi.resetModules();
|
|
await installRegistry();
|
|
});
|
|
|
|
it("derives non-WhatsApp announce targets from the session key", async () => {
|
|
const { resolveAnnounceTarget } = await loadResolveAnnounceTarget();
|
|
const target = await resolveAnnounceTarget({
|
|
sessionKey: "agent:main:discord:group:dev",
|
|
displayKey: "agent:main:discord:group:dev",
|
|
});
|
|
expect(target).toEqual({ channel: "discord", to: "channel:dev" });
|
|
expect(callGatewayMock).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it("hydrates WhatsApp accountId from sessions.list when available", async () => {
|
|
const { resolveAnnounceTarget } = await loadResolveAnnounceTarget();
|
|
callGatewayMock.mockResolvedValueOnce({
|
|
sessions: [
|
|
{
|
|
key: "agent:main:whatsapp:group:123@g.us",
|
|
deliveryContext: {
|
|
channel: "whatsapp",
|
|
to: "123@g.us",
|
|
accountId: "work",
|
|
},
|
|
},
|
|
],
|
|
});
|
|
|
|
const target = await resolveAnnounceTarget({
|
|
sessionKey: "agent:main:whatsapp:group:123@g.us",
|
|
displayKey: "agent:main:whatsapp:group:123@g.us",
|
|
});
|
|
expect(target).toEqual({
|
|
channel: "whatsapp",
|
|
to: "123@g.us",
|
|
accountId: "work",
|
|
});
|
|
expect(callGatewayMock).toHaveBeenCalledTimes(1);
|
|
const first = callGatewayMock.mock.calls[0]?.[0] as { method?: string } | undefined;
|
|
expect(first).toBeDefined();
|
|
expect(first?.method).toBe("sessions.list");
|
|
});
|
|
});
|