fix(ui): reset response pagination when switching logs

This commit is contained in:
Brennan Butler 2026-09-20 09:07:36 +07:00
parent 44b461fa25
commit 840eeca200
2 changed files with 29 additions and 1 deletions

View file

@ -1,4 +1,4 @@
import { render, screen, within } from "@testing-library/react";
import { fireEvent, render, screen, within } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import { describe, expect, it, vi } from "vitest";
import { GuardrailJumpLink, LogDetailContent } from "./LogDetailContent";
@ -34,6 +34,33 @@ const createLogEntry = (overrides: Partial<LogEntry> = {}): LogEntry =>
}) as LogEntry;
describe("LogDetailContent", () => {
it("resets WebSocket pagination for a different log but preserves it when the same log refreshes", () => {
const response = {
results: Array.from({ length: 101 }, (_, index) => ({
type: "response.completed",
response: { id: `resp_${index}`, output: [] },
})),
};
const log = createLogEntry({ request_id: "websocket-first", response });
const { rerender } = render(<LogDetailContent logEntry={log} />);
fireEvent.click(screen.getByRole("button", { name: "Next turns" }));
expect(screen.getByText("Turns 51–100 of 101")).toBeInTheDocument();
rerender(<LogDetailContent logEntry={{ ...log, response: { ...response } }} />);
expect(screen.getByText("Turns 51–100 of 101")).toBeInTheDocument();
rerender(<LogDetailContent logEntry={{ ...log, request_id: "websocket-second" }} />);
expect(screen.getByText("Turns 1–50 of 101")).toBeInTheDocument();
expect(screen.getByRole("button", { name: "Previous turns" })).toBeDisabled();
expect(screen.queryByText("Turn 51 · Completed")).not.toBeInTheDocument();
fireEvent.click(screen.getByRole("button", { name: "Next turns" }));
fireEvent.click(screen.getByRole("button", { name: "Next turns" }));
expect(screen.getByText("Turns 101–101 of 101")).toBeInTheDocument();
rerender(<LogDetailContent logEntry={log} />);
expect(screen.getByText("Turns 1–50 of 101")).toBeInTheDocument();
});
it("should render the component successfully", () => {
render(<LogDetailContent logEntry={createLogEntry()} />);

View file

@ -658,6 +658,7 @@ function RequestResponseSection({
<div>
<TabsContent value="pretty">
<PrettyMessagesView
key={logEntry.request_id}
request={getRawRequest()}
response={getFormattedResponse()}
metrics={{