import React from "react";
import "@testing-library/jest-dom/extend-expect";
import { render, fireEvent } from "@testing-library/react";
import { Input } from "../../";
test("Input basic props", () => {
const onChange = jest.fn();
const onBlur = jest.fn();
const { getByTestId, queryByTestId } = render(
);
const input = getByTestId("input1");
expect(input).toBeTruthy();
expect(input.getAttribute("value")).toBe("100");
expect(onChange).toBeCalledTimes(0);
fireEvent.change(input, { target: { value: "test" } });
expect(onChange).toBeCalledTimes(1);
expect(onChange).toHaveBeenLastCalledWith("test");
expect(onBlur).toBeCalledTimes(0);
fireEvent.blur(input);
expect(onBlur).toBeCalledTimes(1);
expect(getByTestId("input1")).not.toHaveClass("is-invalid");
expect(queryByTestId("input1-error")).toBeNull();
expect(queryByTestId("input1-help")).toBeNull();
expect(getByTestId("input1").getAttribute("readonly")).toBeNull();
expect(getByTestId("input1").getAttribute("disabled")).toBeNull();
expect(getByTestId("input1").getAttribute("autocomplete")).toBe("false");
expect(getByTestId("input1")).toHaveClass("my-class-name");
expect(getByTestId("input1").getAttribute("type")).toBe("text");
});
test("should show default testid", () => {
const { queryByTestId } = render(
{}} />
);
expect(queryByTestId("honeyui-input")).not.toBeNull();
});
test("should show label", () => {
const { getByTestId, queryByTestId } = render(
{}} data-testid="input1" />
);
expect(getByTestId("input1").getAttribute("id")).toBe("name1");
expect(getByTestId("input1-label")).toHaveTextContent("My label");
expect(getByTestId("input1-label").getAttribute("for")).toBe("name1");
});
test("should show error", () => {
const { getByTestId } = render(
{}}
data-testid="input1"
error="error msg"
/>
);
expect(getByTestId("input1")).toHaveClass("is-invalid");
expect(getByTestId("input1-error")).toHaveTextContent("error msg");
expect(getByTestId("input1-error")).toHaveClass("invalid-feedback");
});
test("should show help", () => {
const { getByTestId } = render(
{}}
data-testid="input1"
help="help msg"
/>
);
expect(getByTestId("input1-help")).toHaveTextContent("help msg");
});
test("should be readOnly", () => {
const { getByTestId } = render(
{}}
data-testid="input1"
readOnly
/>
);
expect(getByTestId("input1").getAttribute("readonly")).toBe("");
});
test("should be disabled", () => {
const { getByTestId } = render(
{}}
data-testid="input1"
disabled
/>
);
expect(getByTestId("input1").getAttribute("disabled")).toBe("");
});
test("should be autoComplete", () => {
const { getByTestId } = render(
{}}
data-testid="input1"
autoComplete
/>
);
expect(getByTestId("input1").getAttribute("autocomplete")).toBe("true");
});
test("should be required", () => {
const { getByTestId } = render(
{}}
data-testid="input1"
required
/>
);
expect(getByTestId("input1").getAttribute("required")).toBe("");
});
test("should be type password", () => {
const { getByTestId } = render(
{}}
data-testid="input1"
required
/>
);
expect(getByTestId("input1").getAttribute("type")).toBe("password");
});
test("should show input prepend and append", () => {
const { getByTestId } = render(
{}}
value="100"
/>
);
expect(getByTestId("input-group-prepend-text")).toHaveTextContent("@");
expect(getByTestId("input-group-append-text")).toHaveTextContent("$");
});