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();
});
});