Use MDEx streaming to render chat content

This commit is contained in:
Claudio Ortolina
2026-03-20 23:42:10 +00:00
parent de8a0a044a
commit 56d9d6bfd7
4 changed files with 84 additions and 13 deletions
+34
View File
@@ -5,6 +5,40 @@ defmodule MusicLibraryWeb.MarkdownTest do
doctest MusicLibraryWeb.Markdown
describe "streaming" do
test "new document renders empty string" do
doc = Markdown.new_streaming_doc()
assert Markdown.streaming_to_html(doc) == ""
end
test "incremental chunks produce valid HTML" do
doc = Markdown.new_streaming_doc()
doc = MDEx.Document.put_markdown(doc, "**bold")
html = Markdown.streaming_to_html(doc)
assert html =~ "<strong>bold</strong>"
doc = MDEx.Document.put_markdown(doc, " text**")
html = Markdown.streaming_to_html(doc)
assert html =~ "<strong>bold text</strong>"
end
test "handles incomplete code fences" do
doc = Markdown.new_streaming_doc()
doc = MDEx.Document.put_markdown(doc, "```elixir\nIO.puts")
html = Markdown.streaming_to_html(doc)
assert html =~ "IO"
assert html =~ "puts"
assert html =~ "<code"
end
test "sanitizes script tags" do
doc = Markdown.new_streaming_doc()
doc = MDEx.Document.put_markdown(doc, "<script>alert(1)</script>")
html = Markdown.streaming_to_html(doc)
refute html =~ "<script>"
end
end
describe "to_html/1" do
test "strips script tags" do
result = Markdown.to_html("<script>alert('xss')</script>")