refactor: rewrite from Ruby/Sinatra to Python/FastAPI
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
"""Tests for Frontmatter parser — TOML frontmatter parsing and serialisation."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from volumen.frontmatter import dump, parse
|
||||
|
||||
|
||||
class TestParse:
|
||||
def test_parse_extracts_metadata_and_body(self) -> None:
|
||||
content = '+++\ntitle = "Hello"\ntags = ["a", "b"]\n+++\n\nBody text.\n'
|
||||
metadata, body = parse(content)
|
||||
assert metadata["title"] == "Hello"
|
||||
assert metadata["tags"] == ["a", "b"]
|
||||
assert body == "Body text.\n"
|
||||
|
||||
def test_parse_without_frontmatter(self) -> None:
|
||||
metadata, body = parse("# Just markdown\n")
|
||||
assert metadata == {}
|
||||
assert body == "# Just markdown\n"
|
||||
|
||||
def test_parse_without_closing_delimiter(self) -> None:
|
||||
content = '+++\ntitle = "x"\n\nbody'
|
||||
metadata, body = parse(content)
|
||||
assert metadata == {}
|
||||
assert body == content
|
||||
|
||||
def test_parse_empty_frontmatter(self) -> None:
|
||||
content = "+++\n+++\n\nBody here.\n"
|
||||
metadata, body = parse(content)
|
||||
assert metadata == {}
|
||||
assert body == "Body here.\n"
|
||||
|
||||
def test_parse_draft_false(self) -> None:
|
||||
content = '+++\ntitle = "X"\ndraft = false\n+++\n\nBody\n'
|
||||
metadata, body = parse(content)
|
||||
assert metadata["draft"] is False
|
||||
|
||||
def test_parse_nested_tables(self) -> None:
|
||||
content = '+++\n[meta]\ntitle = "X"\n+++\n\nBody\n'
|
||||
metadata, body = parse(content)
|
||||
assert metadata["meta"]["title"] == "X"
|
||||
|
||||
def test_parse_normalises_crlf(self) -> None:
|
||||
metadata, body = parse('+++\r\ntitle = "x"\r\n+++\r\n\r\nBody\r\n')
|
||||
assert metadata["title"] == "x"
|
||||
assert body == "Body\n"
|
||||
|
||||
|
||||
class TestDump:
|
||||
def test_dump_produces_valid_frontmatter(self) -> None:
|
||||
result = dump({"title": "Hello", "tags": ["a"]}, "Body text.\n")
|
||||
assert result.startswith("+++\n")
|
||||
assert "+++\n\n" in result
|
||||
assert "Body text." in result
|
||||
|
||||
def test_dump_empty_metadata(self) -> None:
|
||||
result = dump({}, "Just body.\n")
|
||||
assert "+++" in result
|
||||
assert "Just body." in result
|
||||
|
||||
def test_round_trip(self) -> None:
|
||||
metadata = {"title": "Hello", "tags": ["intro"], "draft": False}
|
||||
dumped = dump(metadata, "Hello **world**.")
|
||||
parsed_meta, parsed_body = parse(dumped)
|
||||
assert parsed_meta == metadata
|
||||
assert parsed_body.strip() == "Hello **world**."
|
||||
|
||||
def test_round_trip_with_empty_metadata(self) -> None:
|
||||
dumped = dump({}, "Just body.\n")
|
||||
parsed_meta, parsed_body = parse(dumped)
|
||||
assert parsed_meta == {}
|
||||
assert parsed_body.strip() == "Just body."
|
||||
|
||||
def test_round_trip_preserves_dates(self) -> None:
|
||||
metadata = {"title": "X", "date": "2026-01-15"}
|
||||
dumped = dump(metadata, "Body\n")
|
||||
parsed_meta, _ = parse(dumped)
|
||||
assert parsed_meta["date"] == "2026-01-15"
|
||||
Reference in New Issue
Block a user