























@@ -548,6 +548,108 @@ describe("handleSlackMessageAction", () => {
548548}),
549549).rejects.toThrow(/fileId/i);
550550});
551+552+it("defaults member-info userId to the inbound sender when omitted", async () => {
553+const invoke = createInvokeSpy();
554+555+await handleSlackMessageAction({
556+providerId: "slack",
557+ctx: {
558+action: "member-info",
559+cfg: {},
560+params: {},
561+accountId: "OPS",
562+requesterAccountId: "ops",
563+requesterSenderId: "U123",
564+toolContext: { currentChannelProvider: " Slack " },
565+} as never,
566+invoke: invoke as never,
567+});
568+569+expect(invoke).toHaveBeenCalledWith(
570+expect.objectContaining({ action: "memberInfo", userId: "U123" }),
571+expect.any(Object),
572+);
573+});
574+575+it("defaults member-info userId through the configured default Slack account", async () => {
576+const invoke = createInvokeSpy();
577+578+await handleSlackMessageAction({
579+providerId: "slack",
580+ctx: {
581+action: "member-info",
582+cfg: { channels: { slack: { defaultAccount: "ops", accounts: { ops: {} } } } },
583+params: {},
584+requesterAccountId: "OPS",
585+requesterSenderId: "U123",
586+toolContext: { currentChannelProvider: "slack" },
587+} as never,
588+invoke: invoke as never,
589+});
590+591+expect(invoke).toHaveBeenCalledWith(
592+expect.objectContaining({ action: "memberInfo", userId: "U123" }),
593+expect.any(Object),
594+);
595+});
596+597+it.each([
598+["has no inbound sender", { toolContext: { currentChannelProvider: "slack" } }],
599+["has no source provider", { requesterSenderId: "U123" }],
600+[
601+"has no source account",
602+{
603+accountId: "default",
604+requesterSenderId: "U123",
605+toolContext: { currentChannelProvider: "slack" },
606+},
607+],
608+[
609+"targets another Slack account",
610+{
611+accountId: "other",
612+requesterAccountId: "default",
613+requesterSenderId: "U123",
614+toolContext: { currentChannelProvider: "slack" },
615+},
616+],
617+[
618+"comes from another provider",
619+{ requesterSenderId: "U123", toolContext: { currentChannelProvider: "telegram" } },
620+],
621+])("rejects member-info without userId when the request %s", async (_label, context) => {
622+await expect(
623+handleSlackMessageAction({
624+providerId: "slack",
625+ctx: { action: "member-info", cfg: {}, params: {}, ...context } as never,
626+invoke: createInvokeSpy() as never,
627+}),
628+).rejects.toThrow(/member-info requires a userId/i);
629+});
630+631+it("prefers an explicit member-info userId over the inbound sender", async () => {
632+const invoke = createInvokeSpy();
633+634+await handleSlackMessageAction({
635+providerId: "slack",
636+ctx: {
637+action: "member-info",
638+cfg: {},
639+params: { userId: "U999" },
640+accountId: "other",
641+requesterAccountId: "default",
642+requesterSenderId: "U123",
643+toolContext: { currentChannelProvider: "telegram" },
644+} as never,
645+invoke: invoke as never,
646+});
647+648+expect(invoke).toHaveBeenCalledWith(
649+expect.objectContaining({ action: "memberInfo", userId: "U999" }),
650+expect.any(Object),
651+);
652+});
551653});
552654553655describe("extractSlackToolSend", () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。