111 lines
3.5 KiB
TypeScript
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");
|
|
}
|
|
});
|
|
});
|