diff --git a/packages/dashboard/app/components/__tests__/QuickChatFAB.test.tsx b/packages/dashboard/app/components/__tests__/QuickChatFAB.test.tsx index fe3943a8c..539c52cc0 100644 --- a/packages/dashboard/app/components/__tests__/QuickChatFAB.test.tsx +++ b/packages/dashboard/app/components/__tests__/QuickChatFAB.test.tsx @@ -221,6 +221,91 @@ describe("QuickChatFAB session-first UX", () => { expect(screen.getByRole("option", { name: /Claude thread/i })).toBeInTheDocument(); }); + it("reopen restores the newest active session by max(lastMessageAt, updatedAt)", async () => { + mockFetchChatSessions.mockResolvedValueOnce({ + sessions: [ + { + ...modelSession, + id: "older-updated", + updatedAt: "2026-05-13T10:00:00.000Z", + lastMessageAt: "2026-05-13T10:00:00.000Z", + }, + { + ...agentTwoSession, + id: "newer-last-message", + updatedAt: "2026-05-13T09:00:00.000Z", + lastMessageAt: "2026-05-13T11:00:00.000Z", + }, + ], + }); + + render(); + const fab = screen.getByTestId("quick-chat-fab"); + fireEvent.click(fab); + + await waitFor(() => { + expect(screen.getByTestId("quick-chat-session-dropdown")).toHaveValue("newer-last-message"); + }); + + fireEvent.change(screen.getByTestId("quick-chat-session-dropdown"), { target: { value: "older-updated" } }); + await waitFor(() => { + expect(screen.getByTestId("quick-chat-session-dropdown")).toHaveValue("older-updated"); + }); + + fireEvent.click(screen.getByTestId("quick-chat-close")); + fireEvent.click(fab); + + await waitFor(() => { + expect(screen.getByTestId("quick-chat-session-dropdown")).toHaveValue("newer-last-message"); + }); + }); + + it("reopen still skips archived newest sessions", async () => { + mockFetchChatSessions.mockResolvedValueOnce({ + sessions: [ + { + ...modelSessionAnthropic, + id: "archived-newest", + status: "archived", + updatedAt: "2026-05-13T12:00:00.000Z", + lastMessageAt: "2026-05-13T12:00:00.000Z", + }, + { + ...agentTwoSession, + id: "active-latest", + updatedAt: "2026-05-13T11:00:00.000Z", + lastMessageAt: "2026-05-13T11:00:00.000Z", + }, + { + ...modelSession, + id: "active-older", + updatedAt: "2026-05-13T10:00:00.000Z", + lastMessageAt: "2026-05-13T10:00:00.000Z", + }, + ], + }); + + render(); + const fab = screen.getByTestId("quick-chat-fab"); + fireEvent.click(fab); + + await waitFor(() => { + expect(screen.getByTestId("quick-chat-session-dropdown")).toHaveValue("active-latest"); + }); + + fireEvent.change(screen.getByTestId("quick-chat-session-dropdown"), { target: { value: "active-older" } }); + await waitFor(() => { + expect(screen.getByTestId("quick-chat-session-dropdown")).toHaveValue("active-older"); + }); + + fireEvent.click(screen.getByTestId("quick-chat-close")); + fireEvent.click(fab); + + await waitFor(() => { + expect(screen.getByTestId("quick-chat-session-dropdown")).toHaveValue("active-latest"); + }); + }); + it("falls back to the existing default target when there are no prior sessions", async () => { mockFetchChatSessions.mockResolvedValueOnce({ sessions: [] });