60 lines
1.6 KiB
TypeScript
60 lines
1.6 KiB
TypeScript
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
import { renderHook, act, waitFor } from "@testing-library/react";
|
|
import { useUsageData } from "../useUsageData";
|
|
import * as api from "../../api";
|
|
|
|
vi.mock("../../api", () => ({
|
|
fetchUsageData: vi.fn(),
|
|
}));
|
|
|
|
const mockFetchUsageData = vi.mocked(api.fetchUsageData);
|
|
|
|
describe("useUsageData visibility change", () => {
|
|
beforeEach(() => {
|
|
vi.useFakeTimers({ shouldAdvanceTime: true });
|
|
mockFetchUsageData.mockReset();
|
|
// Set default visibility state to visible
|
|
Object.defineProperty(document, "visibilityState", {
|
|
value: "visible",
|
|
writable: true,
|
|
configurable: true,
|
|
});
|
|
});
|
|
|
|
afterEach(() => {
|
|
vi.useRealTimers();
|
|
delete (document as any).visibilityState;
|
|
});
|
|
|
|
function setVisibilityState(state: "visible" | "hidden") {
|
|
Object.defineProperty(document, "visibilityState", {
|
|
value: state,
|
|
writable: true,
|
|
configurable: true,
|
|
});
|
|
}
|
|
|
|
it("does not refetch when visibility changes to hidden", async () => {
|
|
const initialData = {
|
|
providers: [{ name: "Claude", icon: "🟠", status: "ok" as const, windows: [] }],
|
|
};
|
|
mockFetchUsageData.mockResolvedValueOnce(initialData);
|
|
|
|
renderHook(() => useUsageData({ autoRefresh: false }));
|
|
|
|
await waitFor(() => {
|
|
expect(mockFetchUsageData).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
mockFetchUsageData.mockClear();
|
|
|
|
setVisibilityState("hidden");
|
|
|
|
await act(async () => {
|
|
document.dispatchEvent(new Event("visibilitychange"));
|
|
});
|
|
|
|
expect(mockFetchUsageData).not.toHaveBeenCalled();
|
|
});
|
|
});
|