import { describe, it, expect, vi, afterEach } from "vitest"; import { renderHook } from "@testing-library/react"; import { useIsMobile } from "../../hooks/use-mobile.js"; function setViewport(width: number) { Object.defineProperty(window, "innerWidth", { configurable: true, writable: true, value: width, }); window.matchMedia = vi.fn().mockImplementation((query: string) => ({ matches: width < 768, media: query, onchange: null, addEventListener: vi.fn(), removeEventListener: vi.fn(), addListener: vi.fn(), removeListener: vi.fn(), dispatchEvent: vi.fn(), })); } afterEach(() => { vi.restoreAllMocks(); }); describe("useIsMobile", () => { it("is true below the 768px breakpoint", () => { setViewport(500); const { result } = renderHook(() => useIsMobile()); expect(result.current).toBe(true); }); it("is false at or above the breakpoint", () => { setViewport(1024); const { result } = renderHook(() => useIsMobile()); expect(result.current).toBe(false); }); it("treats exactly 768 as not mobile", () => { setViewport(768); const { result } = renderHook(() => useIsMobile()); expect(result.current).toBe(false); }); });