Spaces:
Paused
Paused
| import { describe, expect, it, vi } from "vitest"; | |
| const { normalizeMessageContent, downloadMediaMessage } = vi.hoisted(() => ({ | |
| normalizeMessageContent: vi.fn((msg: unknown) => msg), | |
| downloadMediaMessage: vi.fn().mockResolvedValue(Buffer.from("fake-media-data")), | |
| })); | |
| vi.mock("@whiskeysockets/baileys", () => ({ | |
| normalizeMessageContent, | |
| downloadMediaMessage, | |
| })); | |
| import { downloadInboundMedia } from "./media.js"; | |
| const mockSock = { | |
| updateMediaMessage: vi.fn(), | |
| logger: { child: () => ({}) }, | |
| } as never; | |
| describe("downloadInboundMedia", () => { | |
| it("returns undefined for messages without media", async () => { | |
| const msg = { message: { conversation: "hello" } } as never; | |
| const result = await downloadInboundMedia(msg, mockSock); | |
| expect(result).toBeUndefined(); | |
| }); | |
| it("uses explicit mimetype from audioMessage when present", async () => { | |
| const msg = { | |
| message: { audioMessage: { mimetype: "audio/mp4", ptt: true } }, | |
| } as never; | |
| const result = await downloadInboundMedia(msg, mockSock); | |
| expect(result).toBeDefined(); | |
| expect(result?.mimetype).toBe("audio/mp4"); | |
| }); | |
| it("defaults to audio/ogg for voice messages without explicit MIME", async () => { | |
| const msg = { | |
| message: { audioMessage: { ptt: true } }, | |
| } as never; | |
| const result = await downloadInboundMedia(msg, mockSock); | |
| expect(result).toBeDefined(); | |
| expect(result?.mimetype).toBe("audio/ogg; codecs=opus"); | |
| }); | |
| it("defaults to audio/ogg for audio messages without MIME or ptt flag", async () => { | |
| const msg = { | |
| message: { audioMessage: {} }, | |
| } as never; | |
| const result = await downloadInboundMedia(msg, mockSock); | |
| expect(result).toBeDefined(); | |
| expect(result?.mimetype).toBe("audio/ogg; codecs=opus"); | |
| }); | |
| it("uses explicit mimetype from imageMessage when present", async () => { | |
| const msg = { | |
| message: { imageMessage: { mimetype: "image/png" } }, | |
| } as never; | |
| const result = await downloadInboundMedia(msg, mockSock); | |
| expect(result).toBeDefined(); | |
| expect(result?.mimetype).toBe("image/png"); | |
| }); | |
| it("defaults to image/jpeg for images without explicit MIME", async () => { | |
| const msg = { | |
| message: { imageMessage: {} }, | |
| } as never; | |
| const result = await downloadInboundMedia(msg, mockSock); | |
| expect(result).toBeDefined(); | |
| expect(result?.mimetype).toBe("image/jpeg"); | |
| }); | |
| it("defaults to video/mp4 for video messages without explicit MIME", async () => { | |
| const msg = { | |
| message: { videoMessage: {} }, | |
| } as never; | |
| const result = await downloadInboundMedia(msg, mockSock); | |
| expect(result).toBeDefined(); | |
| expect(result?.mimetype).toBe("video/mp4"); | |
| }); | |
| it("defaults to image/webp for sticker messages without explicit MIME", async () => { | |
| const msg = { | |
| message: { stickerMessage: {} }, | |
| } as never; | |
| const result = await downloadInboundMedia(msg, mockSock); | |
| expect(result).toBeDefined(); | |
| expect(result?.mimetype).toBe("image/webp"); | |
| }); | |
| it("preserves fileName from document messages", async () => { | |
| const msg = { | |
| message: { | |
| documentMessage: { mimetype: "application/pdf", fileName: "report.pdf" }, | |
| }, | |
| } as never; | |
| const result = await downloadInboundMedia(msg, mockSock); | |
| expect(result).toBeDefined(); | |
| expect(result?.mimetype).toBe("application/pdf"); | |
| expect(result?.fileName).toBe("report.pdf"); | |
| }); | |
| }); | |