refactor: combine frontmatter fields and block, add tests

This commit is contained in:
2026-07-18 07:11:02 +05:00
parent e2e194efb5
commit 3b34171ea0
5 changed files with 188 additions and 158 deletions
+53
View File
@@ -1,5 +1,6 @@
import { describe, expect, it } from "vitest";
import {
extractFrontmatterBlock,
findFieldRange,
formatTagsYamlValue,
replaceFrontmatterField,
@@ -76,3 +77,55 @@ describe("setFrontmatterTags", () => {
expect(result.content).not.toContain("tags: [old]");
});
});
describe("extractFrontmatterBlock", () => {
it("extracts yaml from a valid block", () => {
const block = extractFrontmatterBlock(
"---\ntitle: Hello\nstatus: todo\n---\nbody",
);
expect(block).not.toBeNull();
expect(block!.yaml).toBe("title: Hello\nstatus: todo");
expect(block!.closeLine).toBe(3);
});
it("returns null when content does not start with ---", () => {
expect(extractFrontmatterBlock("no frontmatter")).toBeNull();
expect(extractFrontmatterBlock("")).toBeNull();
});
it("handles unclosed frontmatter with trailing newline", () => {
const block = extractFrontmatterBlock("---\ntitle: x\n");
expect(block).not.toBeNull();
expect(block!.closeLine).toBe(-1);
expect(block!.yaml).toBe("title: x\n");
});
it("handles unclosed frontmatter without trailing newline", () => {
const block = extractFrontmatterBlock("---\ntitle: x");
expect(block).not.toBeNull();
expect(block!.closeLine).toBe(-1);
expect(block!.yaml).toBe("title: x");
});
it("handles CRLF line endings (yaml is normalized to LF)", () => {
const block = extractFrontmatterBlock(
"---\r\ntitle: Hello\r\nstatus: todo\r\n---\r\nbody",
);
expect(block).not.toBeNull();
expect(block!.yaml).toBe("title: Hello\nstatus: todo");
});
it("handles --- with trailing whitespace", () => {
const block = extractFrontmatterBlock(
"--- \ntitle: Hello\n--- \nbody",
);
expect(block).not.toBeNull();
expect(block!.yaml).toBe("title: Hello");
expect(block!.closeLine).toBe(2);
});
it("only matches --- on the first line", () => {
const block = extractFrontmatterBlock("text\n---\ntitle: x\n---\n");
expect(block).toBeNull();
});
});