import "@testing-library/jest-dom/extend-expect";
import React, { ReactNode } from "react";
import { Formik } from "formik";
import { render, fireEvent, waitForDomChange } from "@testing-library/react";
import FormItem from ".";
import Input from "../input";
import Form from "../form/form";
import Select from "../select";
import SubmitButton from "../submit-button";
const { Option } = Select;
const Test = ({
children,
validate
}: {
children: ReactNode;
validate?: () => object;
}) => {
return (
{}} validate={validate}>
);
};
test("displays validation result", async () => {
const validate = () => ({ test: "error" });
const { getByTestId, queryByText } = render(
);
expect(queryByText("error")).not.toBeInTheDocument();
fireEvent.change(getByTestId("input"), {
target: { name: "test", value: "test" }
});
fireEvent.click(getByTestId("submit"));
await waitForDomChange();
expect(queryByText("error")).toBeInTheDocument();
});
test("handles changes on multiselect without prop-types error", async () => {
const { getByTestId, queryByText, getByText } = render(
);
expect(queryByText("error")).not.toBeInTheDocument();
fireEvent.click(getByTestId("input"));
fireEvent.click(getByText("1"));
console.error = jest.fn();
fireEvent.click(getByTestId("submit"));
await waitForDomChange();
expect(console.error).not.toHaveBeenCalled();
//@ts-ignore
console.error.mockRestore();
});
test("displays validation result on nested input", async () => {
const validate = () => "error";
const { getByTestId, queryByText } = render(
{}}>
);
expect(queryByText("error")).not.toBeInTheDocument();
fireEvent.change(getByTestId("input"), {
target: { name: "test", value: "test" }
});
fireEvent.blur(getByTestId("input"));
fireEvent.click(getByTestId("submit"));
await waitForDomChange();
expect(queryByText("error")).toBeInTheDocument();
});
test("displays validation success ", async () => {
const validate = () => undefined;
const { getByTestId, queryByLabelText } = render(
{}}>
);
expect(queryByLabelText("icon: check-circle")).not.toBeInTheDocument();
fireEvent.change(getByTestId("input"), {
target: { name: "test", value: "test" }
});
fireEvent.blur(getByTestId("input"));
expect(queryByLabelText("icon: check-circle")).toBeInTheDocument();
});