69 lines
2.5 KiB
TypeScript
69 lines
2.5 KiB
TypeScript
import { afterEach, beforeEach, describe, expect, test, vi } from "vitest";
|
|
import { act, renderHook } from "@testing-library/react";
|
|
import { useFading } from "../../../hooks/feed/useFading.ts";
|
|
|
|
afterEach(() => vi.useRealTimers());
|
|
|
|
describe("useFading", () => {
|
|
beforeEach(() => vi.useFakeTimers());
|
|
|
|
test("cooldown for 2s, then dismissing for 350ms, then gone", () => {
|
|
const { result } = renderHook(useFading);
|
|
act(() => result.current.startFading("a"));
|
|
expect(result.current.fading).toEqual({ a: "cooldown" });
|
|
act(() => vi.advanceTimersByTime(2000));
|
|
expect(result.current.fading).toEqual({ a: "dismissing" });
|
|
act(() => vi.advanceTimersByTime(350));
|
|
expect(result.current.fading).toEqual({});
|
|
});
|
|
|
|
test("starting twice is one animation", () => {
|
|
const { result } = renderHook(useFading);
|
|
act(() => result.current.startFading("a"));
|
|
act(() => vi.advanceTimersByTime(1000));
|
|
act(() => result.current.startFading("a"));
|
|
act(() => vi.advanceTimersByTime(1000));
|
|
expect(result.current.fading).toEqual({ a: "dismissing" });
|
|
});
|
|
|
|
test("cancel during cooldown and during dismissal", () => {
|
|
const { result } = renderHook(useFading);
|
|
act(() => result.current.startFading("a"));
|
|
act(() => result.current.cancelFading("a"));
|
|
expect(result.current.fading).toEqual({});
|
|
act(() => vi.advanceTimersByTime(5000));
|
|
expect(result.current.fading).toEqual({});
|
|
|
|
act(() => result.current.startFading("b"));
|
|
act(() => vi.advanceTimersByTime(2100));
|
|
act(() => result.current.cancelFading("b"));
|
|
expect(result.current.fading).toEqual({});
|
|
// Cancelled means it can start over.
|
|
act(() => result.current.startFading("b"));
|
|
expect(result.current.fading).toEqual({ b: "cooldown" });
|
|
});
|
|
|
|
test("cancelAll", () => {
|
|
const { result } = renderHook(useFading);
|
|
act(() => {
|
|
result.current.startFading("a");
|
|
result.current.startFading("b");
|
|
});
|
|
act(() => result.current.cancelAll());
|
|
expect(result.current.fading).toEqual({});
|
|
});
|
|
|
|
test("onFaded hears of a fade that ended, not of a cancelled one", () => {
|
|
const onFaded = vi.fn();
|
|
const { result } = renderHook(() => useFading(onFaded));
|
|
act(() => {
|
|
result.current.startFading("a");
|
|
result.current.startFading("b");
|
|
});
|
|
act(() => vi.advanceTimersByTime(2100));
|
|
act(() => result.current.cancelFading("b"));
|
|
act(() => vi.advanceTimersByTime(250));
|
|
expect(onFaded.mock.calls).toEqual([["a"]]);
|
|
});
|
|
});
|