paperclip / packages /shared /src /validators /approval.test.ts
cjovs's picture
Deploy Paperclip CN to Hugging Face Space
96e86e5
Raw
History Blame Contribute Delete
1.44 kB
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.");
});
});