import React from "react"; import IconButton from "./icon-button"; import { fireEvent, render } from "@testing-library/react-native"; import { ThemeProvider } from "../../../theme/src/theme-context"; import Icon from "../../atoms/icon/icon"; jest.useFakeTimers(); describe("Molecules/IconButton", () => { it("passes the snapshot test for basic setup", async () => { const onPress = jest.fn(); const tree = await render( } onPress={onPress} /> ).toJSON(); expect(tree).toMatchSnapshot(); }); it("passes the snapshot test for different sizes", async () => { const onPress = jest.fn(); const tree = await render( } onPress={onPress} size="xs" /> } onPress={onPress} size="s" /> } onPress={onPress} size="m" /> } onPress={onPress} size="l" /> ).toJSON(); expect(tree).toMatchSnapshot(); }); it("passes the snapshot test for different variants", async () => { const onPress = jest.fn(); const tree = await render( } onPress={onPress} variant="filled" /> } onPress={onPress} variant="outline" /> } onPress={onPress} variant="ghost" /> ).toJSON(); expect(tree).toMatchSnapshot(); }); it("passes the snapshot test for different icons", async () => { const tree = await render( } /> } /> ).toJSON(); expect(tree).toMatchSnapshot(); }); it("passes the snapshot test for loading state", async () => { const tree = await render( } isLoading > Basic loading IconButton ).toJSON(); expect(tree).toMatchSnapshot(); }); it("passes the snapshot test for different color schemes", async () => { const tree = await render( } colorScheme="primary" /> } colorScheme="secondary" /> ).toJSON(); expect(tree).toMatchSnapshot(); }); it("passes the snapshot test when using style props", async () => { const onPress = jest.fn(); const tree = await render( } backgroundColor="primary.500" borderColor="neutral.400" borderWidth={2} /> ).toJSON(); expect(tree).toMatchSnapshot(); }); it("captures the onPress event", async () => { const onPress = jest.fn(); const component = await render( } onPress={onPress} testID="testOnPress" /> ); const tree = component.toJSON(); if ((tree as any).children[0].type !== "RNGestureHandlerButton") { const pressableInstance = component.getByTestId("testOnPress"); fireEvent.press(pressableInstance); expect(onPress).toHaveBeenCalledTimes(1); } }); it("doesn't capture the onPress event when the button is disabled ", async () => { const onPress = jest.fn(); const component = await render( } onPress={onPress} isDisabled testID="testOnPress" /> ); const tree = component.toJSON(); if ((tree as any).children[0].type !== "RNGestureHandlerButton") { const pressableInstance = component.getByTestId("testOnPress"); fireEvent.press(pressableInstance); expect(onPress).toHaveBeenCalledTimes(0); } }); it("doesn't capture the onPress event when the button is in loading state ", async () => { const onPress = jest.fn(); const component = await render( } onPress={onPress} isLoading testID="testOnPress" /> ); const tree = component.toJSON(); if ((tree as any).children[0].type !== "RNGestureHandlerButton") { const pressableInstance = component.getByTestId("testOnPress"); fireEvent.press(pressableInstance); expect(onPress).toHaveBeenCalledTimes(0); } }); });