Files
kandev/apps/web/components/review/review-markdown-diff-preview.test.ts
T
2026-07-30 10:44:30 +01:00

95 lines
2.5 KiB
TypeScript

import { describe, expect, it } from "vitest";
import type { ReviewFile } from "./types";
import { extractReviewMarkdownPreview } from "./review-markdown-diff-preview";
function reviewFile(
overrides: Partial<ReviewFile>,
): Pick<ReviewFile, "diff" | "status" | "diff_skip_reason"> {
return {
diff: "",
status: "modified",
...overrides,
};
}
describe("extractReviewMarkdownPreview", () => {
it("renders a complete added Markdown file as one document", () => {
const preview = extractReviewMarkdownPreview(
reviewFile({
status: "added",
diff: [
"diff --git a/docs/guide.md b/docs/guide.md",
"new file mode 100644",
"--- /dev/null",
"+++ b/docs/guide.md",
"@@ -0,0 +1,4 @@",
"+# Guide",
"+",
"+Use the new flow.",
"+",
].join("\n"),
}),
);
expect(preview).toEqual({
fragments: ["# Guide\n\nUse the new flow.\n"],
isComplete: true,
isPartial: false,
});
});
it("keeps modified Markdown hunks separate and removes deleted lines", () => {
const preview = extractReviewMarkdownPreview(
reviewFile({
diff: [
"diff --git a/docs/guide.md b/docs/guide.md",
"--- a/docs/guide.md",
"+++ b/docs/guide.md",
"@@ -1,3 +1,3 @@",
" # Guide",
"-Old introduction.",
"+New introduction.",
"@@ -20,3 +20,3 @@",
" ## Usage",
"-Run old-command.",
"+Run new-command.",
"\\ No newline at end of file",
].join("\n"),
}),
);
expect(preview).toEqual({
fragments: ["# Guide\nNew introduction.", "## Usage\nRun new-command."],
isComplete: false,
isPartial: true,
});
});
it("marks truncated renderable content as partial", () => {
const preview = extractReviewMarkdownPreview(
reviewFile({
status: "added",
diff_skip_reason: "truncated",
diff: "@@ -0,0 +1,1 @@\n+# Partial guide",
}),
);
expect(preview).toEqual({
fragments: ["# Partial guide"],
isComplete: false,
isPartial: true,
});
});
it("does not expose a preview for a deleted file with no new-side Markdown", () => {
const preview = extractReviewMarkdownPreview(
reviewFile({
status: "deleted",
diff: "@@ -1,2 +0,0 @@\n-# Removed\n-Old content",
}),
);
expect(preview.fragments).toEqual([]);
});
});