63 lines
1.8 KiB
TypeScript
63 lines
1.8 KiB
TypeScript
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);
|
|
});
|
|
});
|