Files
wehub-resource-sync 64ed910d3f
CI / Backend Checks (push) Has been cancelled
CI / Frontend Checks (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 11:57:20 +08:00

162 lines
4.0 KiB
TypeScript

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) => (
<button {...props}>{children}</button>
),
}));
vi.mock("@/components/ui/input", () => ({
Input: (props: any) => <input {...props} />,
}));
vi.mock("@/components/ui/select", () => ({
Select: ({ children }: any) => <div>{children}</div>,
SelectTrigger: ({ children, ...props }: any) => (
<button type="button" {...props}>
{children}
</button>
),
SelectValue: ({ placeholder }: any) => <span>{placeholder ?? null}</span>,
SelectContent: () => null,
SelectItem: () => null,
}));
vi.mock("@/components/ui/table", () => ({
Table: ({ children }: any) => <table>{children}</table>,
TableBody: ({ children }: any) => <tbody>{children}</tbody>,
TableCell: ({ children, ...props }: any) => <td {...props}>{children}</td>,
TableHead: ({ children, ...props }: any) => <th {...props}>{children}</th>,
TableHeader: ({ children }: any) => <thead>{children}</thead>,
TableRow: ({ children }: any) => <tr>{children}</tr>,
}));
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(
<RequestLogTable
range={initialRange}
rangeLabel="Today"
appType="all"
refreshIntervalMs={0}
/>,
);
fireEvent.click(screen.getByRole("button", { name: "2" }));
await waitFor(() => {
expect(useRequestLogsMock).toHaveBeenLastCalledWith(
expect.objectContaining({
page: 1,
range: initialRange,
}),
);
});
rerender(
<RequestLogTable
range={nextRange}
rangeLabel="Custom"
appType="all"
refreshIntervalMs={0}
/>,
);
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(
<RequestLogTable
range={range}
rangeLabel="Today"
appType="all"
refreshIntervalMs={0}
/>,
);
fireEvent.click(screen.getByRole("button", { name: "2" }));
await waitFor(() => {
expect(useRequestLogsMock).toHaveBeenLastCalledWith(
expect.objectContaining({
page: 1,
range,
}),
);
});
rerender(
<RequestLogTable
range={range}
rangeLabel="Today"
appType="claude"
refreshIntervalMs={0}
/>,
);
await waitFor(() => {
expect(useRequestLogsMock).toHaveBeenLastCalledWith(
expect.objectContaining({
page: 0,
range,
}),
);
});
});
});