From 151bdbb2a9d6cfb3ccf758a98b04cfa02779a959 Mon Sep 17 00:00:00 2001 From: Daniel Meismer Date: Thu, 13 Aug 2026 11:21:48 -0400 Subject: [PATCH] test(ui): cover user filter pagination Co-Authored-By: Codex --- .../view_logs/RequestLogsFilters.test.tsx | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/ui/litellm-dashboard/src/components/view_logs/RequestLogsFilters.test.tsx b/ui/litellm-dashboard/src/components/view_logs/RequestLogsFilters.test.tsx index 0d50effabb4..fd53949c87a 100644 --- a/ui/litellm-dashboard/src/components/view_logs/RequestLogsFilters.test.tsx +++ b/ui/litellm-dashboard/src/components/view_logs/RequestLogsFilters.test.tsx @@ -135,6 +135,38 @@ describe("RequestLogsFilters", () => { await waitFor(() => expect(useInfiniteUsers).toHaveBeenCalledWith(50, "alice@example.com")); }); + it("loads the next page when the User ID list is scrolled near the end", async () => { + const fetchNextPage = vi.fn(); + vi.mocked(useInfiniteUsers).mockReturnValue({ + ...emptyInfiniteQuery, + fetchNextPage, + hasNextPage: true, + data: { + pages: [ + { + users: [{ user_id: "user-1", user_alias: "Alice", user_email: "alice@example.com" }], + page: 1, + page_size: 50, + total: 51, + total_pages: 2, + }, + ], + pageParams: [1], + }, + } as unknown as ReturnType); + const user = userEvent.setup(); + renderFilters(); + + await user.click(await screen.findByPlaceholderText("Search an internal user")); + const list = await screen.findByTestId("paginated-search-select-list"); + Object.defineProperty(list, "scrollTop", { value: 90, configurable: true }); + Object.defineProperty(list, "clientHeight", { value: 10, configurable: true }); + Object.defineProperty(list, "scrollHeight", { value: 100, configurable: true }); + list.dispatchEvent(new Event("scroll", { bubbles: true })); + + await waitFor(() => expect(fetchNextPage).toHaveBeenCalled()); + }); + it("does not show or query the User ID filter for non-admin request logs", () => { renderFilters({}, false);