import { test, expect } from "bun:test"; import { validateEditBody, isNoOpEdit, EditValidationError, MAX_EDIT_BODY_BYTES, } from "./a31_edit_validation.ts"; test("validateEditBody returns the body when valid", () => { expect(validateEditBody("# title\n\nsome body")).toBe("# title\n\nsome body"); }); test("validateEditBody rejects non-string input", () => { expect(() => validateEditBody(42)).toThrow(EditValidationError); expect(() => validateEditBody(null)).toThrow(EditValidationError); expect(() => validateEditBody(undefined)).toThrow(EditValidationError); }); test("validateEditBody rejects empty / whitespace-only", () => { expect(() => validateEditBody("")).toThrow(EditValidationError); expect(() => validateEditBody(" \n\t ")).toThrow(EditValidationError); }); test("validateEditBody rejects bodies over the byte cap", () => { const tooBig = "x".repeat(MAX_EDIT_BODY_BYTES + 1); expect(() => validateEditBody(tooBig)).toThrow(/exceeds/); }); test("validateEditBody accepts a body right at the cap", () => { const exact = "x".repeat(MAX_EDIT_BODY_BYTES); expect(validateEditBody(exact)).toBe(exact); }); test("isNoOpEdit is byte-equal, not whitespace-tolerant", () => { expect(isNoOpEdit("a", "a")).toBe(true); expect(isNoOpEdit("a", "a ")).toBe(false); expect(isNoOpEdit("a\n", "a")).toBe(false); expect(isNoOpEdit("", "")).toBe(true); });