import React from "react";
import "@testing-library/jest-dom/extend-expect";
import { render } from "@testing-library/react";
import Button from "../button";
const variants = [
"primary",
"secondary",
"success",
"danger",
"warning",
"info",
"light",
"dark",
"link",
"white",
"outline-primary",
"outline-secondary",
"outline-success",
"outline-danger",
"outline-warning",
"outline-info",
"outline-light",
"outline-dark",
"outline-white"
] as const;
test("shows default button", () => {
const { queryByTestId } = render();
expect(queryByTestId("btn")).toBeTruthy();
expect(queryByTestId("btn")).toHaveClass("btn-primary");
});
test("shows custom color disabled button", () => {
const { queryByTestId } = render(
);
expect(queryByTestId("btn")).toBeTruthy();
expect(queryByTestId("btn")).toHaveClass("btn-info");
expect(queryByTestId("btn")).toHaveClass("disabled");
});
test("shows different variant buttons", () => {
variants.forEach((variant: typeof variants[number]) => {
const { queryByTestId, unmount } = render(
);
expect(queryByTestId("btn")).toHaveClass(`btn-${variant}`);
unmount();
});
});
test("shows different sizes", () => {
const sm = render(
);
expect(sm.queryByTestId("btn")).toHaveClass(`btn-sm`);
sm.unmount();
const lg = render(
);
expect(lg.queryByTestId("btn")).toHaveClass(`btn-lg`);
lg.unmount();
});
test("shows different types", () => {
const button = render(
);
expect(button.queryByTestId("btn").getAttribute("type")).toEqual("button");
button.unmount();
const submit = render(
);
expect(submit.queryByTestId("btn").getAttribute("type")).toEqual("submit");
submit.unmount();
const reset = render(
);
expect(reset.queryByTestId("btn").getAttribute("type")).toEqual("reset");
reset.unmount();
});
test("shows active state", () => {
const active = render(
);
expect(active.queryByTestId("btn")).toHaveClass("active");
active.unmount();
const notActive = render();
expect(notActive.queryByTestId("btn")).not.toHaveClass("btn-lg");
notActive.unmount();
});
test("shows as block", () => {
const block = render(
);
expect(block.queryByTestId("btn")).toHaveClass("btn-block");
block.unmount();
const notBlock = render();
expect(notBlock.queryByTestId("btn")).not.toHaveClass("btn-block");
notBlock.unmount();
});