import { renderToStaticMarkup } from "react-dom/server"; import { describe, expect, it, vi } from "vitest"; import { ChatMessageList } from "./chat-message-list"; const message = { id: "server", sequence: "2", body: "Confirmed", authorUserId: "user", createdAt: "2026-01-01", }; describe("rendered message states", () => { it("shows a visible sending state and a retry only on failure", () => { const pending = { key: "same-key", body: "Hello", failed: false, retry: vi.fn(), }; const sending = renderToStaticMarkup( , ); expect(sending).toContain("Sending…"); expect(sending).not.toContain("Retry"); const failed = renderToStaticMarkup( , ); expect(failed).toContain('role="alert"'); expect(failed).toContain("Retry"); }); it("renders only the messages supplied by the parent", () => { const html = renderToStaticMarkup(); expect(html).toContain("Confirmed"); expect(html).not.toContain("Sending…"); expect(html).not.toContain("Retry"); const empty = renderToStaticMarkup(); expect(empty).not.toContain("Confirmed"); }); it("shows an edited indicator for edited messages", () => { const html = renderToStaticMarkup( , ); expect(html).toContain("(edited)"); }); it("only offers owner edit, owner or moderator delete, and never archived or deleted controls", () => { const own = renderToStaticMarkup( , ); expect(own).toContain("Edit message server"); expect(own).toContain("Delete message server"); const moderator = renderToStaticMarkup( , ); expect(moderator).not.toContain("Edit message server"); expect(moderator).toContain("Delete message server"); const archived = renderToStaticMarkup( , ); expect(archived).not.toContain("Edit message server"); const deleted = renderToStaticMarkup( , ); expect(deleted).not.toContain("Delete message server"); }); it("renders deleted messages as a placeholder instead of their body", () => { const html = renderToStaticMarkup( , ); expect(html).toContain("Message deleted"); expect(html).not.toContain("Confirmed"); }); });