syntaxai/tdd.md · main · src / a31_edit_validation.test.ts
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);
});