import { describe, expect, test } from "bun:test"; import { parseFrontmatter } from "@oh-my-pi/pi-coding-agent/utils/frontmatter"; describe("parseFrontmatter", () => { const parse = (content: string) => parseFrontmatter(content, { source: "tests:frontmatter", level: "off" }); test("parses simple key-value pairs", () => { const content = `--- name: test enabled: true --- Body content`; const result = parse(content); expect(result.frontmatter).toEqual({ name: "test", enabled: true }); expect(result.body).toBe("Body content"); }); test("parses YAML list syntax", () => { const content = `--- tags: - javascript - typescript - react --- Body content`; const result = parse(content); expect(result.frontmatter).toEqual({ tags: ["javascript", "typescript", "react"], }); expect(result.body).toBe("Body content"); }); test("parses multi-line string values", () => { const content = `--- description: | This is a multi-line description block with several lines --- Body content`; const result = parse(content); expect(result.frontmatter).toEqual({ description: "This is a multi-line\ndescription block\nwith several lines\n", }); expect(result.body).toBe("Body content"); }); test("parses nested objects", () => { const content = `--- config: server: port: 3000 host: localhost database: name: mydb --- Body content`; const result = parse(content); expect(result.frontmatter).toEqual({ config: { server: { port: 3000, host: "localhost" }, database: { name: "mydb" }, }, }); expect(result.body).toBe("Body content"); }); test("parses mixed complex YAML", () => { const content = `--- name: complex-test version: 1.0.0 tags: - prod - critical metadata: author: tester created: 2024-01-01 description: | Multi-line description with formatting --- Body content`; const result = parse(content); expect(result.frontmatter).toEqual({ name: "complex-test", version: "1.0.0", tags: ["prod", "critical"], metadata: { author: "tester", created: "2024-01-01", }, description: "Multi-line description\nwith formatting\n", }); expect(result.body).toBe("Body content"); }); test("handles missing frontmatter", () => { const content = "Just body content"; const result = parse(content); expect(result.frontmatter).toEqual({}); expect(result.body).toBe("Just body content"); }); test("handles invalid YAML in frontmatter", () => { const content = `--- invalid: [unclosed array --- Body content`; const result = parse(content); // Simple fallback parser extracts key:value pairs it can parse expect(result.frontmatter).toEqual({ invalid: "[unclosed array" }); // Body is still extracted even with invalid YAML expect(result.body).toBe("Body content"); }); test("handles empty frontmatter", () => { const content = `--- --- Body content`; const result = parse(content); expect(result.frontmatter).toEqual({}); expect(result.body).toBe("Body content"); }); });