import { describe, expect, it } from "vitest"; import { addApprovalCommentSchema, requestApprovalRevisionSchema, resolveApprovalSchema, } from "./approval.js"; describe("approval validators", () => { it("passes real line breaks through unchanged", () => { expect(addApprovalCommentSchema.parse({ body: "Looks good\n\nApproved." }).body) .toBe("Looks good\n\nApproved."); expect(resolveApprovalSchema.parse({ decisionNote: "Decision\n\nApproved." }).decisionNote) .toBe("Decision\n\nApproved."); }); it("accepts null and omitted optional decision notes", () => { expect(resolveApprovalSchema.parse({ decisionNote: null }).decisionNote).toBeNull(); expect(resolveApprovalSchema.parse({}).decisionNote).toBeUndefined(); expect(requestApprovalRevisionSchema.parse({ decisionNote: null }).decisionNote).toBeNull(); expect(requestApprovalRevisionSchema.parse({}).decisionNote).toBeUndefined(); }); it("normalizes escaped line breaks in approval comments and decision notes", () => { expect(addApprovalCommentSchema.parse({ body: "Looks good\\n\\nApproved." }).body) .toBe("Looks good\n\nApproved."); expect(resolveApprovalSchema.parse({ decisionNote: "Decision\\n\\nApproved." }).decisionNote) .toBe("Decision\n\nApproved."); expect(requestApprovalRevisionSchema.parse({ decisionNote: "Decision\\r\\nRevise." }).decisionNote) .toBe("Decision\nRevise."); }); });