import { renderHook } from "@testing-library/react"; import { afterEach, beforeEach, expect, test, vi } from "vitest"; const mocks = vi.hoisted(() => ({ appCode: "lalu", getDashboardUserProfileOverview: vi.fn(), queryFn: null, queryOptions: null, reload: vi.fn(), timeZone: "Asia/Shanghai" })); vi.mock("@/app/app-scope/AppScopeProvider.jsx", () => ({ useAppScope: () => ({ appCode: mocks.appCode }) })); vi.mock("@/app/timezone/TimeZoneProvider.jsx", () => ({ useTimeZone: () => ({ timeZone: mocks.timeZone }) })); vi.mock("@/features/dashboard/api", () => ({ getDashboardUserProfileOverview: mocks.getDashboardUserProfileOverview })); vi.mock("@/shared/hooks/useAdminQuery.js", () => ({ useAdminQuery: (queryFn, options) => { mocks.queryFn = queryFn; mocks.queryOptions = options; return { data: null, error: "", loading: false, reload: mocks.reload }; } })); import { useDashboardPage } from "./useDashboardPage.js"; beforeEach(() => { mocks.appCode = "lalu"; mocks.timeZone = "Asia/Shanghai"; mocks.getDashboardUserProfileOverview.mockResolvedValue(null); }); afterEach(() => { vi.restoreAllMocks(); vi.clearAllMocks(); }); test("isolates the query by App and time zone and requests the current local day", async () => { const now = Date.UTC(2026, 6, 11, 2, 30, 0); vi.spyOn(Date, "now").mockReturnValue(now); const { rerender } = renderHook(() => useDashboardPage()); expect(mocks.queryOptions.queryKey).toEqual(["dashboard", "user-profile-overview", "lalu", "Asia/Shanghai"]); expect(mocks.queryOptions.refetchInterval()).toBe(Date.UTC(2026, 6, 11, 16, 0, 1) - now); await mocks.queryFn(); expect(mocks.getDashboardUserProfileOverview).toHaveBeenLastCalledWith({ appCode: "lalu", endMs: now, startMs: Date.UTC(2026, 6, 10, 16, 0, 0), statTz: "Asia/Shanghai" }); mocks.appCode = "huwaa"; mocks.timeZone = "UTC"; rerender(); expect(mocks.queryOptions.queryKey).toEqual(["dashboard", "user-profile-overview", "huwaa", "UTC"]); expect(mocks.queryOptions.refetchInterval()).toBe(Date.UTC(2026, 6, 12, 0, 0, 1) - now); await mocks.queryFn(); expect(mocks.getDashboardUserProfileOverview).toHaveBeenLastCalledWith({ appCode: "huwaa", endMs: now, startMs: Date.UTC(2026, 6, 11, 0, 0, 0), statTz: "UTC" }); });