Kansho/backend/tests/test_journal_body.py
2026-08-25 13:57:23 +02:00

53 lines
1.9 KiB
Python

"""Journal body as Markdown. Run from backend/: python tests/test_journal_body.py"""
from __future__ import annotations
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT))
from journal_body import media_ids, media_token, plain_text, to_markdown
MEDIA_A = "11111111-1111-4111-8111-111111111111"
MEDIA_B = "22222222-2222-4222-8222-222222222222"
def expect(ok: bool, message: str) -> None:
if not ok:
raise SystemExit(f"FAIL: {message}")
print(f"OK {message}")
def main() -> None:
raw = (
"Heute war der Markt voll.\n\n"
"- Kirschen\n"
"- Brot\n\n"
f"![Stand am Eingang](kansho-media:{MEDIA_A})\n\n"
"Später der **Hafen**."
)
expect(media_ids(raw) == [MEDIA_A], "markdown media ids")
text = plain_text(raw)
expect(MEDIA_A not in text, "plain text drops asset id")
expect("kansho-media" not in text, "plain text drops media url")
expect("Stand am Eingang" in text and "Kirschen" in text and "Hafen" in text, "wording kept")
expect("**" not in text, "markup stripped")
legacy = f"Anfang\n\n[[media:{MEDIA_A}|Stand]]\n\nMitte\n\n[[media:{MEDIA_B}]]"
converted = to_markdown(legacy)
expect(media_token(MEDIA_A, "Stand") in converted, "legacy becomes markdown")
expect(media_ids(legacy) == [MEDIA_A, MEDIA_B], "legacy ids")
expect(MEDIA_A not in plain_text(legacy), "legacy ids stripped in plain text")
expect(plain_text("nur text") == "nur text", "plain body unchanged")
expect(media_token(MEDIA_A, "Kai") == f"![Kai](kansho-media:{MEDIA_A})", "token shape")
from journal_body import clean_title
expect(clean_title("# ein langer Tag") == "ein langer Tag", "markdown heading stripped from title")
expect(clean_title("## Morgen\nRest") == "Morgen", "first line only")
print("journal body ok")
if __name__ == "__main__":
main()