28 lines · 1.0 KB
import { describe, expect, mock, test } from "bun:test";

mock.module("cloudflare:workers", () => ({ env: {}, waitUntil: () => undefined }));

const { countedResponse } = await import("./usage");

describe("countedResponse", () => {
  test("reports the streamed byte count once the body is consumed", async () => {
    const counts: number[] = [];
    const response = countedResponse(new Response("hello world"), (bytes) => counts.push(bytes));
    expect(await response.text()).toBe("hello world");
    expect(counts).toEqual([11]);
  });

  test("an empty body is counted at once", () => {
    const counts: number[] = [];
    countedResponse(new Response(null, { status: 304 }), (bytes) => counts.push(bytes));
    expect(counts).toEqual([0]);
  });

  test("a cancelled download still counts what was sent", async () => {
    const counts: number[] = [];
    const response = countedResponse(new Response("abcdef"), (bytes) => counts.push(bytes));
    await response.body?.cancel();
    expect(counts).toEqual([0]);
  });
});