82 lines
2.3 KiB
TypeScript
82 lines
2.3 KiB
TypeScript
import type { App } from "@slack/bolt";
|
|
import { describe, expect, it } from "vitest";
|
|
|
|
import type { ClawdbotConfig } from "../../../config/config.js";
|
|
import type { RuntimeEnv } from "../../../runtime.js";
|
|
import { expectInboundContextContract } from "../../../../test/helpers/inbound-contract.js";
|
|
import type { ResolvedSlackAccount } from "../../accounts.js";
|
|
import type { SlackMessageEvent } from "../../types.js";
|
|
import { createSlackMonitorContext } from "../context.js";
|
|
import { prepareSlackMessage } from "./prepare.js";
|
|
|
|
describe("slack prepareSlackMessage inbound contract", () => {
|
|
it("produces a finalized MsgContext", async () => {
|
|
const slackCtx = createSlackMonitorContext({
|
|
cfg: {
|
|
channels: { slack: { enabled: true } },
|
|
} as ClawdbotConfig,
|
|
accountId: "default",
|
|
botToken: "token",
|
|
app: { client: {} } as App,
|
|
runtime: {} as RuntimeEnv,
|
|
botUserId: "B1",
|
|
teamId: "T1",
|
|
apiAppId: "A1",
|
|
historyLimit: 0,
|
|
sessionScope: "per-sender",
|
|
mainKey: "main",
|
|
dmEnabled: true,
|
|
dmPolicy: "open",
|
|
allowFrom: [],
|
|
groupDmEnabled: true,
|
|
groupDmChannels: [],
|
|
defaultRequireMention: true,
|
|
groupPolicy: "open",
|
|
useAccessGroups: false,
|
|
reactionMode: "off",
|
|
reactionAllowlist: [],
|
|
replyToMode: "off",
|
|
threadHistoryScope: "thread",
|
|
threadInheritParent: false,
|
|
slashCommand: {
|
|
enabled: false,
|
|
name: "clawd",
|
|
sessionPrefix: "slack:slash",
|
|
ephemeral: true,
|
|
},
|
|
textLimit: 4000,
|
|
ackReactionScope: "group-mentions",
|
|
mediaMaxBytes: 1024,
|
|
removeAckAfterReply: false,
|
|
});
|
|
slackCtx.resolveUserName = async () => ({ name: "Alice" } as any);
|
|
|
|
const account: ResolvedSlackAccount = {
|
|
accountId: "default",
|
|
enabled: true,
|
|
botTokenSource: "config",
|
|
appTokenSource: "config",
|
|
config: {},
|
|
};
|
|
|
|
const message: SlackMessageEvent = {
|
|
channel: "D123",
|
|
channel_type: "im",
|
|
user: "U1",
|
|
text: "hi",
|
|
ts: "1.000",
|
|
} as SlackMessageEvent;
|
|
|
|
const prepared = await prepareSlackMessage({
|
|
ctx: slackCtx,
|
|
account,
|
|
message,
|
|
opts: { source: "message" },
|
|
});
|
|
|
|
expect(prepared).toBeTruthy();
|
|
expectInboundContextContract(prepared!.ctxPayload as any);
|
|
});
|
|
});
|
|
|