Files
clawdbot/src/discord/monitor/message-handler.inbound-contract.test.ts
2026-01-17 05:06:39 +00:00

91 lines
2.7 KiB
TypeScript

import fs from "node:fs/promises";
import os from "node:os";
import path from "node:path";
import { describe, expect, it, vi } from "vitest";
import type { MsgContext } from "../../auto-reply/templating.js";
import { expectInboundContextContract } from "../../../test/helpers/inbound-contract.js";
let capturedCtx: MsgContext | undefined;
vi.mock("../../auto-reply/reply/dispatch-from-config.js", () => ({
dispatchReplyFromConfig: vi.fn(async (params: { ctx: MsgContext }) => {
capturedCtx = params.ctx;
return { queuedFinal: false, counts: { tool: 0, block: 0 } };
}),
}));
import { processDiscordMessage } from "./message-handler.process.js";
describe("discord processDiscordMessage inbound contract", () => {
it("passes a finalized MsgContext to dispatchReplyFromConfig", async () => {
capturedCtx = undefined;
const dir = await fs.mkdtemp(path.join(os.tmpdir(), "clawdbot-discord-"));
const storePath = path.join(dir, "sessions.json");
await processDiscordMessage({
cfg: { messages: {}, session: { store: storePath } } as any,
discordConfig: {} as any,
accountId: "default",
token: "token",
runtime: { log: () => {}, error: () => {} } as any,
guildHistories: new Map(),
historyLimit: 0,
mediaMaxBytes: 1024,
textLimit: 4000,
replyToMode: "off",
ackReactionScope: "direct",
groupPolicy: "open",
data: { guild: null } as any,
client: { rest: {} } as any,
message: {
id: "m1",
channelId: "c1",
timestamp: new Date().toISOString(),
attachments: [],
} as any,
author: {
id: "U1",
username: "alice",
discriminator: "0",
globalName: "Alice",
} as any,
channelInfo: null,
channelName: undefined,
isGuildMessage: false,
isDirectMessage: true,
isGroupDm: false,
commandAuthorized: true,
baseText: "hi",
messageText: "hi",
wasMentioned: false,
shouldRequireMention: false,
canDetectMention: false,
effectiveWasMentioned: false,
threadChannel: null,
threadParentId: undefined,
threadParentName: undefined,
threadParentType: undefined,
threadName: undefined,
displayChannelSlug: "",
guildInfo: null,
guildSlug: "",
channelConfig: null,
baseSessionKey: "agent:main:discord:dm:U1",
route: {
agentId: "main",
channel: "discord",
accountId: "default",
sessionKey: "agent:main:discord:dm:U1",
mainSessionKey: "agent:main:main",
} as any,
} as any);
expect(capturedCtx).toBeTruthy();
expectInboundContextContract(capturedCtx!);
});
});