Spaces:
Paused
Paused
File size: 2,600 Bytes
fb4d8fe | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | import { beforeEach, describe, expect, it, vi } from "vitest";
const loadSendMessageIMessage = async () => await import("./send.js");
const requestMock = vi.fn();
const stopMock = vi.fn();
vi.mock("../config/config.js", async (importOriginal) => {
const actual = await importOriginal<typeof import("../config/config.js")>();
return {
...actual,
loadConfig: () => ({}),
};
});
vi.mock("./client.js", () => ({
createIMessageRpcClient: vi.fn().mockResolvedValue({
request: (...args: unknown[]) => requestMock(...args),
stop: (...args: unknown[]) => stopMock(...args),
}),
}));
vi.mock("../web/media.js", () => ({
loadWebMedia: vi.fn().mockResolvedValue({
buffer: Buffer.from("data"),
contentType: "image/jpeg",
}),
}));
vi.mock("../media/store.js", () => ({
saveMediaBuffer: vi.fn().mockResolvedValue({
path: "/tmp/imessage-media.jpg",
contentType: "image/jpeg",
}),
}));
describe("sendMessageIMessage", () => {
beforeEach(() => {
requestMock.mockReset().mockResolvedValue({ ok: true });
stopMock.mockReset().mockResolvedValue(undefined);
vi.resetModules();
});
it("sends to chat_id targets", async () => {
const { sendMessageIMessage } = await loadSendMessageIMessage();
await sendMessageIMessage("chat_id:123", "hi");
const params = requestMock.mock.calls[0]?.[1] as Record<string, unknown>;
expect(requestMock).toHaveBeenCalledWith("send", expect.any(Object), expect.any(Object));
expect(params.chat_id).toBe(123);
expect(params.text).toBe("hi");
});
it("applies sms service prefix", async () => {
const { sendMessageIMessage } = await loadSendMessageIMessage();
await sendMessageIMessage("sms:+1555", "hello");
const params = requestMock.mock.calls[0]?.[1] as Record<string, unknown>;
expect(params.service).toBe("sms");
expect(params.to).toBe("+1555");
});
it("adds file attachment with placeholder text", async () => {
const { sendMessageIMessage } = await loadSendMessageIMessage();
await sendMessageIMessage("chat_id:7", "", { mediaUrl: "http://x/y.jpg" });
const params = requestMock.mock.calls[0]?.[1] as Record<string, unknown>;
expect(params.file).toBe("/tmp/imessage-media.jpg");
expect(params.text).toBe("<media:image>");
});
it("returns message id when rpc provides one", async () => {
requestMock.mockResolvedValue({ ok: true, id: 123 });
const { sendMessageIMessage } = await loadSendMessageIMessage();
const result = await sendMessageIMessage("chat_id:7", "hello");
expect(result.messageId).toBe("123");
});
});
|