80 lines
2.0 KiB
JavaScript
80 lines
2.0 KiB
JavaScript
import { describe, it } from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import {
|
|
parseFrontmatter,
|
|
serializeFrontmatter,
|
|
stripFrontmatter,
|
|
} from "../../../scripts/features/lib/frontmatter.mjs";
|
|
|
|
describe("parseFrontmatter", () => {
|
|
it("returns null when no frontmatter", () => {
|
|
assert.equal(parseFrontmatter("# Heading\nbody"), null);
|
|
});
|
|
|
|
it("parses simple key-value frontmatter", () => {
|
|
const md = `---
|
|
issue: 1046
|
|
last_synced_at: 2026-05-18T14:30:00Z
|
|
last_synced_comment_id: 1234567890
|
|
---
|
|
|
|
# Body`;
|
|
const r = parseFrontmatter(md);
|
|
assert.equal(r.issue, 1046);
|
|
assert.equal(r.last_synced_at, "2026-05-18T14:30:00Z");
|
|
assert.equal(r.last_synced_comment_id, 1234567890);
|
|
});
|
|
|
|
it("parses nested snapshot block", () => {
|
|
const md = `---
|
|
issue: 1046
|
|
snapshot:
|
|
thumbs: 8
|
|
commenters: 4
|
|
labels: [enhancement, ui]
|
|
state: open
|
|
---
|
|
|
|
body`;
|
|
const r = parseFrontmatter(md);
|
|
assert.equal(r.snapshot.thumbs, 8);
|
|
assert.equal(r.snapshot.commenters, 4);
|
|
assert.deepEqual(r.snapshot.labels, ["enhancement", "ui"]);
|
|
assert.equal(r.snapshot.state, "open");
|
|
});
|
|
|
|
it("returns null on malformed delimiters", () => {
|
|
assert.equal(parseFrontmatter("---\nfoo: bar\n# no close"), null);
|
|
});
|
|
});
|
|
|
|
describe("serializeFrontmatter", () => {
|
|
it("round-trips a parsed object", () => {
|
|
const original = `---
|
|
issue: 1046
|
|
last_synced_comment_id: 1234567890
|
|
snapshot:
|
|
thumbs: 8
|
|
commenters: 4
|
|
state: open
|
|
---
|
|
|
|
# Body
|
|
content here`;
|
|
const meta = parseFrontmatter(original);
|
|
const re = serializeFrontmatter(meta, "# Body\ncontent here");
|
|
const parsed2 = parseFrontmatter(re);
|
|
assert.deepEqual(parsed2, meta);
|
|
});
|
|
});
|
|
|
|
describe("stripFrontmatter", () => {
|
|
it("returns body after frontmatter", () => {
|
|
const md = "---\nissue: 1\n---\n\n# Body";
|
|
assert.equal(stripFrontmatter(md), "# Body");
|
|
});
|
|
it("returns full text if no frontmatter", () => {
|
|
assert.equal(stripFrontmatter("# Body"), "# Body");
|
|
});
|
|
});
|