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");
});
});