import { renderHook } from "@testing-library/react-hooks"; import { vi } from "vitest"; import { describe, expect, it } from "vitest"; import { useParamsWithFallback } from "./useParamsWithFallback"; describe("useParamsWithFallback hook", () => { it("should return router.query when param is null", () => { vi.mock("next/navigation", () => ({ useParams: vi.fn().mockReturnValue(null), })); vi.mock("next/compat/router", () => ({ useRouter: vi.fn().mockReturnValue({ query: { id: 1 } }), })); const { result } = renderHook(() => useParamsWithFallback()); expect(result.current).toEqual({ id: 1 }); }); it("should return router.query when param is undefined", () => { vi.mock("next/navigation", () => ({ useParams: vi.fn().mockReturnValue(undefined), })); vi.mock("next/compat/router", () => ({ useRouter: vi.fn().mockReturnValue({ query: { id: 1 } }), })); const { result } = renderHook(() => useParamsWithFallback()); expect(result.current).toEqual({ id: 1 }); }); it("should return useParams() if it exists", () => { vi.mock("next/navigation", () => ({ useParams: vi.fn().mockReturnValue({ id: 1 }), })); vi.mock("next/compat/router", () => ({ useRouter: vi.fn().mockReturnValue(null), })); const { result } = renderHook(() => useParamsWithFallback()); expect(result.current).toEqual({ id: 1 }); }); it("should return useParams() if it exists", () => { vi.mock("next/navigation", () => ({ useParams: vi.fn().mockReturnValue({ id: 1 }), })); vi.mock("next/compat/router", () => ({ useRouter: vi.fn().mockReturnValue({ query: { id: 2 } }), })); const { result } = renderHook(() => useParamsWithFallback()); expect(result.current).toEqual({ id: 1 }); }); });