forked from farhoodlabs/paperclip
9a8a169e95
Co-Authored-By: Paperclip <noreply@paperclip.ing>
46 lines
1.5 KiB
TypeScript
46 lines
1.5 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { createCapturedOutputBuffer, parseJsonResponseWithLimit } from "../../../scripts/dev-runner-output.mjs";
|
|
|
|
describe("createCapturedOutputBuffer", () => {
|
|
it("keeps small output unchanged", () => {
|
|
const capture = createCapturedOutputBuffer(32);
|
|
capture.append("hello");
|
|
capture.append(" world");
|
|
|
|
expect(capture.finish()).toEqual({
|
|
text: "hello world",
|
|
totalBytes: 11,
|
|
truncated: false,
|
|
});
|
|
});
|
|
|
|
it("retains only the bounded tail when output grows large", () => {
|
|
const capture = createCapturedOutputBuffer(8);
|
|
capture.append("abcd");
|
|
capture.append(Buffer.from("efgh"));
|
|
capture.append("ijkl");
|
|
|
|
const result = capture.finish();
|
|
expect(result.truncated).toBe(true);
|
|
expect(result.totalBytes).toBe(12);
|
|
expect(result.text).toContain("total 12 bytes");
|
|
expect(result.text.endsWith("efghijkl")).toBe(true);
|
|
});
|
|
|
|
it("parses bounded JSON responses", async () => {
|
|
const response = new Response(JSON.stringify({ ok: true }), {
|
|
headers: { "content-type": "application/json" },
|
|
});
|
|
|
|
await expect(parseJsonResponseWithLimit<{ ok: boolean }>(response, 64)).resolves.toEqual({ ok: true });
|
|
});
|
|
|
|
it("rejects oversized JSON responses before parsing them", async () => {
|
|
const response = new Response(JSON.stringify({ payload: "x".repeat(128) }), {
|
|
headers: { "content-type": "application/json" },
|
|
});
|
|
|
|
await expect(parseJsonResponseWithLimit(response, 32)).rejects.toThrow("Response exceeds 32 bytes");
|
|
});
|
|
});
|