"""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()