import React from "react";
import Button from "./button";
import ButtonGroup from "./button-group";
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/Button", () => {
it("passes the snapshot test for basic setup", async () => {
const onPress = jest.fn();
const tree = await render(
).toJSON();
expect(tree).toMatchSnapshot();
});
it("passes the snapshot test for different sizes", async () => {
const onPress = jest.fn();
const tree = await render(
).toJSON();
expect(tree).toMatchSnapshot();
});
it("passes the snapshot test for different variants", async () => {
const onPress = jest.fn();
const tree = await render(
).toJSON();
expect(tree).toMatchSnapshot();
});
it("passes the snapshot test for different icons", async () => {
const tree = await render(
}>
Button with left icon
}
>
Button with right icon
).toJSON();
expect(tree).toMatchSnapshot();
});
it("passes the snapshot test for loading state", async () => {
const tree = await render(
).toJSON();
expect(tree).toMatchSnapshot();
});
it("passes the snapshot test for different color schemes", async () => {
const tree = await render(
).toJSON();
expect(tree).toMatchSnapshot();
});
it("passes the snapshot test when using style props", async () => {
const onPress = jest.fn();
const tree = await render(
).toJSON();
expect(tree).toMatchSnapshot();
});
it("captures the onPress event", async () => {
const onPress = jest.fn();
const component = await render(
);
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(
);
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(
);
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("passes the snapshot test for ButtonGroup", async () => {
const component = await render(
);
const tree = component.toJSON();
expect(tree).toMatchSnapshot();
});
it("checks if ButtonGroup is disabled", async () => {
const onPress = jest.fn();
const component = await render(
);
const pressableInstance = component.getByTestId("testOnPress");
fireEvent.press(pressableInstance);
expect(onPress).toHaveBeenCalledTimes(0);
});
});