import { fireEvent, render, screen, waitFor } from "@testing-library/react"; import { beforeEach, describe, expect, it, vi } from "vitest"; import { RequestLogTable } from "@/components/usage/RequestLogTable"; import type { UsageRangeSelection } from "@/types/usage"; const useRequestLogsMock = vi.hoisted(() => vi.fn()); vi.mock("react-i18next", () => ({ useTranslation: () => ({ t: ( key: string, options?: { defaultValue?: string; }, ) => options?.defaultValue ?? key, i18n: { resolvedLanguage: "en", language: "en", }, }), })); vi.mock("@/lib/query/usage", () => ({ useRequestLogs: (args: unknown) => useRequestLogsMock(args), })); vi.mock("@/components/ui/button", () => ({ Button: ({ children, ...props }: any) => ( ), })); vi.mock("@/components/ui/input", () => ({ Input: (props: any) => , })); vi.mock("@/components/ui/select", () => ({ Select: ({ children }: any) =>
{children}
, SelectTrigger: ({ children, ...props }: any) => ( ), SelectValue: ({ placeholder }: any) => {placeholder ?? null}, SelectContent: () => null, SelectItem: () => null, })); vi.mock("@/components/ui/table", () => ({ Table: ({ children }: any) => {children}
, TableBody: ({ children }: any) => {children}, TableCell: ({ children, ...props }: any) => {children}, TableHead: ({ children, ...props }: any) => {children}, TableHeader: ({ children }: any) => {children}, TableRow: ({ children }: any) => {children}, })); describe("RequestLogTable", () => { beforeEach(() => { useRequestLogsMock.mockReset(); useRequestLogsMock.mockImplementation( ({ page = 0, pageSize = 20 }: { page?: number; pageSize?: number }) => ({ data: { data: [], total: 120, page, pageSize, }, isLoading: false, }), ); }); it("resets pagination when the dashboard range changes", async () => { const initialRange: UsageRangeSelection = { preset: "today" }; const nextRange: UsageRangeSelection = { preset: "custom", customStartDate: 1_710_000_000, customEndDate: 1_710_086_400, }; const { rerender } = render( , ); fireEvent.click(screen.getByRole("button", { name: "2" })); await waitFor(() => { expect(useRequestLogsMock).toHaveBeenLastCalledWith( expect.objectContaining({ page: 1, range: initialRange, }), ); }); rerender( , ); await waitFor(() => { expect(useRequestLogsMock).toHaveBeenLastCalledWith( expect.objectContaining({ page: 0, range: nextRange, }), ); }); }); it("resets pagination when the dashboard app filter changes", async () => { const range: UsageRangeSelection = { preset: "today" }; const { rerender } = render( , ); fireEvent.click(screen.getByRole("button", { name: "2" })); await waitFor(() => { expect(useRequestLogsMock).toHaveBeenLastCalledWith( expect.objectContaining({ page: 1, range, }), ); }); rerender( , ); await waitFor(() => { expect(useRequestLogsMock).toHaveBeenLastCalledWith( expect.objectContaining({ page: 0, range, }), ); }); }); });