| import { afterEach, describe, expect, it, vi } from "vitest"; |
|
|
| import type { ResolvedGoogleChatAccount } from "./accounts.js"; |
| import { downloadGoogleChatMedia } from "./api.js"; |
|
|
| vi.mock("./auth.js", () => ({ |
| getGoogleChatAccessToken: vi.fn().mockResolvedValue("token"), |
| })); |
|
|
| const account = { |
| accountId: "default", |
| enabled: true, |
| credentialSource: "inline", |
| config: {}, |
| } as ResolvedGoogleChatAccount; |
|
|
| describe("downloadGoogleChatMedia", () => { |
| afterEach(() => { |
| vi.unstubAllGlobals(); |
| }); |
|
|
| it("rejects when content-length exceeds max bytes", async () => { |
| const body = new ReadableStream({ |
| start(controller) { |
| controller.enqueue(new Uint8Array([1, 2, 3])); |
| controller.close(); |
| }, |
| }); |
| const response = new Response(body, { |
| status: 200, |
| headers: { "content-length": "50", "content-type": "application/octet-stream" }, |
| }); |
| vi.stubGlobal("fetch", vi.fn().mockResolvedValue(response)); |
|
|
| await expect( |
| downloadGoogleChatMedia({ account, resourceName: "media/123", maxBytes: 10 }), |
| ).rejects.toThrow(/max bytes/i); |
| }); |
|
|
| it("rejects when streamed payload exceeds max bytes", async () => { |
| const chunks = [new Uint8Array(6), new Uint8Array(6)]; |
| let index = 0; |
| const body = new ReadableStream({ |
| pull(controller) { |
| if (index < chunks.length) { |
| controller.enqueue(chunks[index++]); |
| } else { |
| controller.close(); |
| } |
| }, |
| }); |
| const response = new Response(body, { |
| status: 200, |
| headers: { "content-type": "application/octet-stream" }, |
| }); |
| vi.stubGlobal("fetch", vi.fn().mockResolvedValue(response)); |
|
|
| await expect( |
| downloadGoogleChatMedia({ account, resourceName: "media/123", maxBytes: 10 }), |
| ).rejects.toThrow(/max bytes/i); |
| }); |
| }); |
|
|