@@ -121,6 +121,30 @@ describe("sendMessageIMessage receipts", () => {
|
121 | 121 | expect(result.receipt.sentAt).toBeGreaterThan(0); |
122 | 122 | }); |
123 | 123 | |
| 124 | +it("drops reply metadata from text sends when reply actions are disabled", async () => { |
| 125 | +const client = createClient({ guid: "p:0/imsg-plain" }); |
| 126 | + |
| 127 | +const result = await sendMessageIMessage("chat_id:42", "hello", { |
| 128 | +config: { |
| 129 | +channels: { |
| 130 | +imessage: { |
| 131 | +actions: { reply: false }, |
| 132 | +accounts: { default: {} }, |
| 133 | +}, |
| 134 | +}, |
| 135 | +}, |
| 136 | + client, |
| 137 | +replyToId: "reply-1", |
| 138 | +}); |
| 139 | + |
| 140 | +const sendParams = getClientMocks(client).request.mock.calls[0]?.[1] as |
| 141 | +| Record<string, unknown> |
| 142 | +| undefined; |
| 143 | +expect(sendParams).not.toHaveProperty("reply_to"); |
| 144 | +expect(result.receipt.replyToId).toBeUndefined(); |
| 145 | +expect(result.receipt.parts[0]?.replyToId).toBeUndefined(); |
| 146 | +}); |
| 147 | + |
124 | 148 | it("passes the default RPC send transport", async () => { |
125 | 149 | const client = createClient({ guid: "p:0/imsg-transport-default" }); |
126 | 150 | |
@@ -299,6 +323,35 @@ describe("sendMessageIMessage receipts", () => {
|
299 | 323 | expect(client["request"]).not.toHaveBeenCalled(); |
300 | 324 | }); |
301 | 325 | |
| 326 | +it("drops reply metadata from media sends when reply actions are disabled", async () => { |
| 327 | +const client = createClient({ message_id: 12345 }); |
| 328 | +const runCliJson = vi.fn().mockResolvedValueOnce({ messageId: "p:0/plain-media-guid" }); |
| 329 | + |
| 330 | +const result = await sendMessageIMessage("chat_guid:chat-1", "", { |
| 331 | +config: { |
| 332 | +channels: { |
| 333 | +imessage: { |
| 334 | +actions: { reply: false }, |
| 335 | +accounts: { default: {} }, |
| 336 | +}, |
| 337 | +}, |
| 338 | +}, |
| 339 | + client, |
| 340 | +mediaUrl: "/tmp/image.png", |
| 341 | +replyToId: "p:0/reply-guid", |
| 342 | +resolveAttachmentImpl: async () => ({ path: "/tmp/image.png", contentType: "image/png" }), |
| 343 | + runCliJson, |
| 344 | +}); |
| 345 | + |
| 346 | +expect(result.messageId).toBe("p:0/plain-media-guid"); |
| 347 | +expect(runCliJson.mock.calls).toEqual([ |
| 348 | +[["send-attachment", "--chat", "chat-1", "--file", "/tmp/image.png", "--transport", "auto"]], |
| 349 | +]); |
| 350 | +expect(result.receipt.replyToId).toBeUndefined(); |
| 351 | +expect(result.receipt.parts[0]?.replyToId).toBeUndefined(); |
| 352 | +expect(client["request"]).not.toHaveBeenCalled(); |
| 353 | +}); |
| 354 | + |
302 | 355 | it("resolves chat_id media-only payloads before using send-attachment", async () => { |
303 | 356 | const client = createClient({ message_id: 12345 }); |
304 | 357 | const runCliJson = vi |
|