import React from "react"; import { Text } from "react-native"; import { render, screen } from "@testing-library/react-native"; import { BottomSheetDragArea } from "../BottomSheetDragArea"; import { BottomSheetContext } from "@applicaster/zapp-react-native-utils/bottomSheet"; // Reveal PanGestureHandler and capture its props. jest.mock("react-native-gesture-handler", () => { const { View } = require("react-native"); const actual = jest.requireActual("react-native-gesture-handler"); return { __esModule: true, ...actual, PanGestureHandler: ({ children, onGestureEvent, onHandlerStateChange, simultaneousHandlers, }: any) => ( {children} ), }; }); const makeValue = () => ({ scrollRef: React.createRef(), masterDrawerRef: React.createRef(), drawerRef: React.createRef(), onScroll: jest.fn(), setBodyDragEnabled: jest.fn(), onDragGestureEvent: jest.fn(), onDragStateChange: jest.fn(), }); describe("BottomSheetDragArea", () => { it("wraps children in a sheet-wired PanGestureHandler when inside a sheet", () => { const value = makeValue(); render( hi ); const pan = screen.getByTestId("drag-pan"); expect(pan.props.onGestureEvent).toBe(value.onDragGestureEvent); expect(pan.props.onHandlerStateChange).toBe(value.onDragStateChange); expect(pan.props.simultaneousHandlers).toEqual([value.masterDrawerRef]); expect(screen.getByTestId("child")).toBeTruthy(); }); it("renders children bare when used outside a sheet", () => { render( hi ); expect(screen.queryByTestId("drag-pan")).toBeNull(); expect(screen.getByTestId("child")).toBeTruthy(); }); });