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) => ,
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,
}),
);
});
});
});