diff --git a/tests/features/chat/ui/message-stream/stream-markdown-renderer.test.ts b/tests/features/chat/ui/message-stream/stream-markdown-renderer.test.ts
index 5538c409..ea99e3d9 100644
--- a/tests/features/chat/ui/message-stream/stream-markdown-renderer.test.ts
+++ b/tests/features/chat/ui/message-stream/stream-markdown-renderer.test.ts
@@ -25,6 +25,33 @@ describe("renderStreamMarkdown", () => {
expect(parent.textContent).toBe("Title\nbold text");
});
+ it("escapes raw HTML while streaming", () => {
+ const context = streamMarkdownContext();
+ const parent = document.createElement("div");
+
+ renderStreamMarkdown(parent, '
\n\n', context);
+
+ expect(parent.querySelector("img")).toBeNull();
+ expect(parent.querySelector("script")).toBeNull();
+ expect(parent.textContent).toContain('
');
+ expect(parent.textContent).toContain("");
+ });
+
+ it("neutralizes unsafe link protocols while streaming", () => {
+ const openLinkText = vi.fn();
+ const context = streamMarkdownContext({ openLinkText });
+ const parent = document.createElement("div");
+
+ renderStreamMarkdown(parent, "[Run](javascript:alert(1))", context);
+ const link = parent.querySelector("a");
+ link?.click();
+
+ expect(link?.textContent).toBe("Run");
+ expect(link?.getAttribute("href")).toBe("");
+ expect(openLinkText).not.toHaveBeenCalled();
+ expect(notices).toEqual([]);
+ });
+
it("leaves wikilinks as plain text while streaming", () => {
const context = streamMarkdownContext();
const parent = document.createElement("div");