claude-code/src/utils/__tests__/directMemberMessage.test.ts
2026-04-02 20:28:08 +08:00

111 lines
3.5 KiB
TypeScript

import { describe, expect, test } from "bun:test";
import { parseDirectMemberMessage, sendDirectMemberMessage } from "../directMemberMessage";
describe("parseDirectMemberMessage", () => {
test("parses '@agent-name hello world'", () => {
const result = parseDirectMemberMessage("@agent-name hello world");
expect(result).toEqual({ recipientName: "agent-name", message: "hello world" });
});
test("parses '@agent-name single-word'", () => {
const result = parseDirectMemberMessage("@agent-name single-word");
expect(result).toEqual({ recipientName: "agent-name", message: "single-word" });
});
test("returns null for non-matching input", () => {
expect(parseDirectMemberMessage("hello world")).toBeNull();
});
test("returns null for empty string", () => {
expect(parseDirectMemberMessage("")).toBeNull();
});
test("returns null for '@name' without message", () => {
expect(parseDirectMemberMessage("@name")).toBeNull();
});
test("handles hyphenated agent names like '@my-agent msg'", () => {
const result = parseDirectMemberMessage("@my-agent msg");
expect(result).toEqual({ recipientName: "my-agent", message: "msg" });
});
test("handles multiline message content", () => {
const result = parseDirectMemberMessage("@agent line1\nline2");
expect(result).toEqual({ recipientName: "agent", message: "line1\nline2" });
});
test("extracts correct recipientName and message", () => {
const result = parseDirectMemberMessage("@alice please fix the bug");
expect(result?.recipientName).toBe("alice");
expect(result?.message).toBe("please fix the bug");
});
test("trims message whitespace", () => {
const result = parseDirectMemberMessage("@agent hello ");
expect(result?.message).toBe("hello");
});
});
describe("sendDirectMemberMessage", () => {
test("returns error when no team context", async () => {
const result = await sendDirectMemberMessage("agent", "hello", null as any);
expect(result).toEqual({ success: false, error: "no_team_context" });
});
test("returns error for unknown recipient", async () => {
const teamContext = {
teamName: "team1",
teammates: { alice: { name: "alice" } },
};
const result = await sendDirectMemberMessage(
"bob",
"hello",
teamContext as any,
async () => {},
);
expect(result).toEqual({
success: false,
error: "unknown_recipient",
recipientName: "bob",
});
});
test("calls writeToMailbox with correct args for valid recipient", async () => {
let mailboxArgs: any = null;
const teamContext = {
teamName: "team1",
teammates: { alice: { name: "alice" } },
};
const result = await sendDirectMemberMessage(
"alice",
"hello",
teamContext as any,
async (recipient, msg, team) => {
mailboxArgs = { recipient, msg, team };
},
);
expect(result).toEqual({ success: true, recipientName: "alice" });
expect(mailboxArgs.recipient).toBe("alice");
expect(mailboxArgs.msg.text).toBe("hello");
expect(mailboxArgs.msg.from).toBe("user");
expect(mailboxArgs.team).toBe("team1");
});
test("returns success for valid message", async () => {
const teamContext = {
teamName: "team1",
teammates: { bob: { name: "bob" } },
};
const result = await sendDirectMemberMessage(
"bob",
"test message",
teamContext as any,
async () => {},
);
expect(result.success).toBe(true);
if (result.success) {
expect(result.recipientName).toBe("bob");
}
});
});