UNPKG

@crossed/ui

Version:

A universal & performant styling library for React Native, Next.js & React

115 lines (114 loc) 4.18 kB
import { jsx, jsxs } from "react/jsx-runtime"; import { render } from "@crossed/test"; import { Popover } from "../index"; import { Floating } from "../Floating"; import { Text } from "../../typography"; import { useMedia } from "../../useMedia"; jest.mock("../Floating", () => ({ ...jest.requireActual("../Floating"), Floating: jest.fn(() => null) })); jest.mock("../Sheet/index", () => ({ Sheet: Object.assign( jest.fn(({ children }) => children), { Padded: jest.fn(({ children }) => children), Header: jest.fn(({ children }) => children), Title: jest.fn(({ children }) => children), Body: jest.fn(({ children }) => children), ScrollView: jest.fn(({ children }) => children), Content: jest.fn(({ children }) => children) } ) })); jest.mock("@floating-ui/react", () => ({ useFloating: jest.fn(() => ({ refs: { setReference: jest.fn(), setFloating: jest.fn() }, floatingStyles: { position: "absolute", top: 0, left: 0 } })), autoUpdate: jest.fn(), offset: jest.fn((value) => ({ name: "offset", options: value })) // ✅ Mock correct })); jest.mock("@floating-ui/dom", () => ({ flip: jest.fn((options) => ({ name: "flip", options })) })); jest.mock("../../useMedia", () => ({ useMedia: jest.fn() })); jest.mock("react-focus-on", () => ({ FocusOn: ({ children }) => children })); const FloatingMocked = jest.mocked(Floating); const useMediaMocked = jest.mocked(useMedia); const mockUseMedia = (md) => { useMediaMocked.mockReturnValue({ md, sm: false, lg: false, xl: false }); }; describe("Popover", () => { beforeEach(() => { mockUseMedia(true); }); afterEach(() => { FloatingMocked.mockReset(); useMediaMocked.mockReset(); jest.clearAllMocks(); }); test("verify default props", () => { render( /* @__PURE__ */ jsxs(Popover, { children: [ /* @__PURE__ */ jsx(Popover.Trigger, { children: /* @__PURE__ */ jsx(Text, { children: "Trigger" }) }), /* @__PURE__ */ jsx(Popover.Content, { children: /* @__PURE__ */ jsx(Text, { children: "Content" }) }) ] }) ); const call = FloatingMocked.mock.calls[0][0]; expect(call).toHaveProperty("triggerStrategy", "onPress"); expect(call).toHaveProperty("removeScroll", false); expect(call).toHaveProperty("children"); }); test("adapts triggerStrategy on mobile when onPointerEnter", () => { mockUseMedia(false); render( /* @__PURE__ */ jsxs(Popover, { triggerStrategy: "onPointerEnter", children: [ /* @__PURE__ */ jsx(Popover.Trigger, { children: /* @__PURE__ */ jsx(Text, { children: "Trigger" }) }), /* @__PURE__ */ jsx(Popover.Content, { children: /* @__PURE__ */ jsx(Text, { children: "Content" }) }) ] }) ); const call = FloatingMocked.mock.calls[0][0]; expect(call).toHaveProperty("triggerStrategy", "onPress"); }); test("keeps triggerStrategy onPress on mobile", () => { mockUseMedia(false); render( /* @__PURE__ */ jsxs(Popover, { triggerStrategy: "onPress", children: [ /* @__PURE__ */ jsx(Popover.Trigger, { children: /* @__PURE__ */ jsx(Text, { children: "Trigger" }) }), /* @__PURE__ */ jsx(Popover.Content, { children: /* @__PURE__ */ jsx(Text, { children: "Content" }) }) ] }) ); const call = FloatingMocked.mock.calls[0][0]; expect(call).toHaveProperty("triggerStrategy", "onPress"); }); test("keeps triggerStrategy onPointerEnter on desktop", () => { mockUseMedia(true); render( /* @__PURE__ */ jsxs(Popover, { triggerStrategy: "onPointerEnter", children: [ /* @__PURE__ */ jsx(Popover.Trigger, { children: /* @__PURE__ */ jsx(Text, { children: "Trigger" }) }), /* @__PURE__ */ jsx(Popover.Content, { children: /* @__PURE__ */ jsx(Text, { children: "Content" }) }) ] }) ); const call = FloatingMocked.mock.calls[0][0]; expect(call).toHaveProperty("triggerStrategy", "onPointerEnter"); }); test("renders Trigger and Content components", () => { expect(Popover.Trigger).toBeDefined(); expect(Popover.Content).toBeDefined(); }); }); //# sourceMappingURL=Popover.spec.js.map