import { renderHook } from "@testing-library/react";
import { describe, it, vi, expect } from "vitest";
import { useThrottleCallback } from "./useThrottle";
describe("useThrottleCallback", () => {
    it("should throttle the callback", () => {
        vi.useFakeTimers();
        let callback = vi.fn();
        let { result } = renderHook(() => useThrottleCallback(callback, 100));
        result.current();
        result.current();
        result.current();
        expect(callback).toHaveBeenCalledTimes(1);
        vi.advanceTimersByTime(100);
        expect(callback).toHaveBeenCalledTimes(2);
        vi.useRealTimers();
    });
    it("should update the callback when it changes", () => {
        vi.useFakeTimers();
        let callback1 = vi.fn();
        let callback2 = vi.fn();
        let { result, rerender } = renderHook(({ cb }) => useThrottleCallback(cb, 100), { initialProps: { cb: callback1 } });
        result.current();
        expect(callback1).toHaveBeenCalledTimes(1);
        rerender({ cb: callback2 });
        vi.advanceTimersByTime(100);
        result.current();
        expect(callback2).toHaveBeenCalledTimes(1);
        vi.useRealTimers();
    });
});
