feat(webui): track optimistic message delivery status (#5162)
This commit is contained in:
@@ -113,6 +113,53 @@ describe("MessageBubble", () => {
|
||||
expect(screen.queryByRole("button", { name: "Fork" })).not.toBeInTheDocument();
|
||||
});
|
||||
|
||||
it("renders failed delivery details on focus without persistent accepted chrome", async () => {
|
||||
const message: UIMessage = {
|
||||
id: "u-delivery",
|
||||
role: "user",
|
||||
content: "hello",
|
||||
createdAt: Date.now(),
|
||||
deliveryStatus: "sending",
|
||||
};
|
||||
|
||||
const { rerender } = render(<MessageBubble message={message} />);
|
||||
|
||||
expect(screen.getByRole("status")).toHaveTextContent("Sending…");
|
||||
|
||||
rerender(<MessageBubble message={{ ...message, deliveryStatus: "accepted" }} />);
|
||||
expect(screen.queryByRole("status")).not.toBeInTheDocument();
|
||||
|
||||
rerender(
|
||||
<MessageBubble
|
||||
message={{
|
||||
...message,
|
||||
deliveryStatus: "failed",
|
||||
deliveryErrorKind: "message_too_big",
|
||||
}}
|
||||
/>,
|
||||
);
|
||||
expect(screen.queryByRole("status")).not.toBeInTheDocument();
|
||||
const failedStatus = screen.getByRole("button", {
|
||||
name: "Not sent: Message too large",
|
||||
});
|
||||
expect(failedStatus).toHaveClass(
|
||||
"text-destructive/80",
|
||||
"dark:text-red-400/80",
|
||||
);
|
||||
expect(screen.getByText("hello")).not.toHaveClass("ring-1");
|
||||
expect(screen.getByText("hello")).not.toHaveClass("ring-destructive/30");
|
||||
expect(screen.queryByRole("tooltip")).not.toBeInTheDocument();
|
||||
|
||||
fireEvent.focus(failedStatus);
|
||||
|
||||
const tooltip = await screen.findByRole("tooltip");
|
||||
expect(tooltip).toHaveTextContent("Message too large");
|
||||
expect(tooltip).toHaveTextContent(
|
||||
"The server rejected your last message because it exceeded the size limit.",
|
||||
);
|
||||
expect(screen.getByRole("alert")).toHaveClass("sr-only");
|
||||
});
|
||||
|
||||
it("styles only generated quoted context in user messages", () => {
|
||||
const message: UIMessage = {
|
||||
id: "u-quote",
|
||||
|
||||
Reference in New Issue
Block a user