
























@@ -48,12 +48,12 @@ describe("handleSlackAction", () => {
4848return { cfg, context, hasRepliedRef };
4949}
505051-function expectLastSlackSend(content: string, threadTs?: string) {
51+function expectLastSlackSend(content: string, cfg: OpenClawConfig, threadTs?: string) {
5252expect(sendSlackMessage).toHaveBeenLastCalledWith(
5353"channel:C123",
5454content,
5555expect.objectContaining({
56-cfg: expect.any(Object),
56+ cfg,
5757mediaUrl: undefined,
5858 threadTs,
5959blocks: undefined,
@@ -70,7 +70,7 @@ describe("handleSlackAction", () => {
7070params.cfg,
7171params.context,
7272);
73-expectLastSlackSend("Second");
73+expectLastSlackSend("Second", params.cfg);
7474}
75757676async function resolveReadToken(cfg: OpenClawConfig): Promise<string | undefined> {
@@ -189,20 +189,21 @@ describe("handleSlackAction", () => {
189189});
190190191191it("passes threadTs to sendSlackMessage for thread replies", async () => {
192+const cfg = slackConfig();
192193await handleSlackAction(
193194{
194195action: "sendMessage",
195196to: "channel:C123",
196197content: "Hello thread",
197198threadTs: "1234567890.123456",
198199},
199-slackConfig(),
200+cfg,
200201);
201202expect(sendSlackMessage).toHaveBeenCalledWith(
202203"channel:C123",
203204"Hello thread",
204205expect.objectContaining({
205-cfg: expect.any(Object),
206+ cfg,
206207mediaUrl: undefined,
207208threadTs: "1234567890.123456",
208209blocks: undefined,
@@ -506,20 +507,21 @@ describe("handleSlackAction", () => {
506507});
507508508509it("auto-injects threadTs from context when replyToMode=all", async () => {
510+const cfg = slackConfig();
509511await handleSlackAction(
510512{
511513action: "sendMessage",
512514to: "channel:C123",
513515content: "Threaded reply",
514516},
515-slackConfig(),
517+cfg,
516518{
517519currentChannelId: "C123",
518520currentThreadTs: "1111111111.111111",
519521replyToMode: "all",
520522},
521523);
522-expectLastSlackSend("Threaded reply", "1111111111.111111");
524+expectLastSlackSend("Threaded reply", cfg, "1111111111.111111");
523525});
524526525527it("replyToMode=first threads first message then stops", async () => {
@@ -531,7 +533,7 @@ describe("handleSlackAction", () => {
531533context,
532534);
533535534-expectLastSlackSend("First", "1111111111.111111");
536+expectLastSlackSend("First", cfg, "1111111111.111111");
535537await sendSecondMessageAndExpectNoThread({ cfg, context });
536538});
537539@@ -567,41 +569,40 @@ describe("handleSlackAction", () => {
567569context,
568570);
569571570-expectLastSlackSend("Explicit", "9999999999.999999");
572+expectLastSlackSend("Explicit", cfg, "9999999999.999999");
571573expect(hasRepliedRef.value).toBe(true);
572574await sendSecondMessageAndExpectNoThread({ cfg, context });
573575});
574576575577it("replyToMode=first without hasRepliedRef does not thread", async () => {
576-await handleSlackAction(
577-{ action: "sendMessage", to: "channel:C123", content: "No ref" },
578-slackConfig(),
579-{
580-currentChannelId: "C123",
581-currentThreadTs: "1111111111.111111",
582-replyToMode: "first",
583-},
584-);
585-expectLastSlackSend("No ref");
578+const cfg = slackConfig();
579+await handleSlackAction({ action: "sendMessage", to: "channel:C123", content: "No ref" }, cfg, {
580+currentChannelId: "C123",
581+currentThreadTs: "1111111111.111111",
582+replyToMode: "first",
583+});
584+expectLastSlackSend("No ref", cfg);
586585});
587586588587it("does not auto-inject threadTs when replyToMode=off", async () => {
588+const cfg = slackConfig();
589589await handleSlackAction(
590590{ action: "sendMessage", to: "channel:C123", content: "No thread" },
591-slackConfig(),
591+cfg,
592592{
593593currentChannelId: "C123",
594594currentThreadTs: "1111111111.111111",
595595replyToMode: "off",
596596},
597597);
598-expectLastSlackSend("No thread");
598+expectLastSlackSend("No thread", cfg);
599599});
600600601601it("does not auto-inject threadTs when sending to different channel", async () => {
602+const cfg = slackConfig();
602603await handleSlackAction(
603604{ action: "sendMessage", to: "channel:C999", content: "Other channel" },
604-slackConfig(),
605+cfg,
605606{
606607currentChannelId: "C123",
607608currentThreadTs: "1111111111.111111",
@@ -612,7 +613,7 @@ describe("handleSlackAction", () => {
612613"channel:C999",
613614"Other channel",
614615expect.objectContaining({
615-cfg: expect.any(Object),
616+ cfg,
616617mediaUrl: undefined,
617618threadTs: undefined,
618619blocks: undefined,
@@ -621,38 +622,36 @@ describe("handleSlackAction", () => {
621622});
622623623624it("explicit threadTs overrides context threadTs", async () => {
625+const cfg = slackConfig();
624626await handleSlackAction(
625627{
626628action: "sendMessage",
627629to: "channel:C123",
628630content: "Explicit wins",
629631threadTs: "9999999999.999999",
630632},
631-slackConfig(),
633+cfg,
632634{
633635currentChannelId: "C123",
634636currentThreadTs: "1111111111.111111",
635637replyToMode: "all",
636638},
637639);
638-expectLastSlackSend("Explicit wins", "9999999999.999999");
640+expectLastSlackSend("Explicit wins", cfg, "9999999999.999999");
639641});
640642641643it("handles channel target without prefix when replyToMode=all", async () => {
642-await handleSlackAction(
643-{ action: "sendMessage", to: "C123", content: "Bare target" },
644-slackConfig(),
645-{
646-currentChannelId: "C123",
647-currentThreadTs: "1111111111.111111",
648-replyToMode: "all",
649-},
650-);
644+const cfg = slackConfig();
645+await handleSlackAction({ action: "sendMessage", to: "C123", content: "Bare target" }, cfg, {
646+currentChannelId: "C123",
647+currentThreadTs: "1111111111.111111",
648+replyToMode: "all",
649+});
651650expect(sendSlackMessage).toHaveBeenCalledWith(
652651"C123",
653652"Bare target",
654653expect.objectContaining({
655-cfg: expect.any(Object),
654+ cfg,
656655mediaUrl: undefined,
657656threadTs: "1111111111.111111",
658657blocks: undefined,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。