import * as React from "react";
import { render, screen, fireEvent, cleanup } from "@testing-library/react";
import reactToCSS from "react-style-object-to-css";
import { styleClean } from "@sc/utils";
import FormBuilder from "./FormBuilder";
import { defaultData, styleData } from "./FormBuilder.stories";
import { EditorMode } from "../../Editor/types";
import { FormFieldTypes } from "./types";
const testId = "FormBuilder";
const props = {
data: defaultData,
globalFieldStyle: styleData,
};
describe(" Rendering Tests", () => {
it(`Should render component in dom`, () => {
render();
expect(screen.queryByTestId(testId)).toBeTruthy();
});
it(`The list of or displayed should match number of fields in data array`, () => {
const { data } = props;
const liveTestId = "FormBuilder-LiveFormField";
const editTestId = "FormBuilder-EditFormField";
const { rerender } = render(
);
// Live Form Fields
rerender();
expect(screen.queryAllByTestId(liveTestId).length).toEqual(data.length);
// Editor Form Fields
rerender();
expect(screen.queryAllByTestId(editTestId).length).toEqual(data.length);
});
test.skip(`Should use the "validationSchema" prop to determine the Yup validation schema`, () => {});
it(`Should use the labelStyle, inputStyle, iconStyle, descriptionStyle, containerStyle object in the globalFieldStyle prop to determine the style to use for the form fields`, () => {
const { container } = render(
);
expect(container).toMatchSnapshot();
});
});
// describe(" Style rendering Tests", () => {
// afterEach(cleanup);
// it(`Should use the labelStyle object in the globalFieldStyle prop to determine the style to use for the form fields`, () => {
// const checkLabelStyle = (type) => {
// const { data } = props;
// const label = data.filter((itm) => itm.type === type)[0]["label"];
// expect(
// styleClean(screen.getByText(label).getAttribute("style"))
// ).toContain(styleClean(reactToCSS(styleData.labelStyle)));
// };
// render();
// // Checkboxes
// checkLabelStyle(FormFieldTypes.CHECKBOXES);
// // DateField
// checkLabelStyle(FormFieldTypes.DATE);
// // DropdownField
// checkLabelStyle(FormFieldTypes.DROPDOWN);
// // FileUpload
// checkLabelStyle(FormFieldTypes.FILEUPLOAD);
// // LinearScaleField
// checkLabelStyle(FormFieldTypes.LINEARSCALE);
// // MultipleChoice
// checkLabelStyle(FormFieldTypes.MULTIPLECHOICE);
// // TextAreaField
// checkLabelStyle(FormFieldTypes.TEXTAREA);
// // TextField
// checkLabelStyle(FormFieldTypes.TEXT);
// });
// it(`Should use the inputStyle object in the globalFieldStyle prop to determine the style to use for the form fields`, () => {
// render();
// const checkInputStyle = (testId, inputType = "input") => {
// // const input = data.filter(itm => itm.type === type)[0]['']
// expect(
// styleClean(
// screen
// .queryAllByTestId(testId)[0]
// .querySelector(inputType)
// .getAttribute("style")
// )
// ).toContain(
// styleClean(
// reactToCSS({
// ...styleData.inputStyle,
// padding: "15px 15px 15px 40px",
// })
// )
// );
// };
// // DateField
// checkInputStyle("FormBuilder-FormFields-DateField-LIVE");
// // DropdownField
// checkInputStyle("FormBuilder-FormFields-DropdownField-LIVE", "select");
// // TextAreaField
// checkInputStyle("FormBuilder-FormFields-TextAreaField-LIVE", "textarea");
// // TextField
// checkInputStyle("FormBuilder-FormFields-TextField-LIVE");
// });
// it(`Should use the iconStyle object in the globalFieldStyle prop to determine the style to use for the form fields`, () => {
// render();
// const checkIconStyle = (testId) => {
// expect(
// styleClean(
// screen
// .queryAllByTestId(testId)[0]
// .querySelector('[data-testid="WC-ICON-LIVE"]')
// .getAttribute("style")
// )
// ).toContain(styleClean(reactToCSS(styleData.iconStyle)));
// };
// // DateField
// checkIconStyle("FormBuilder-FormFields-DateField-LIVE");
// // DropdownField
// checkIconStyle("FormBuilder-FormFields-DropdownField-LIVE");
// // TextAreaField
// checkIconStyle("FormBuilder-FormFields-TextAreaField-LIVE");
// // TextField
// checkIconStyle("FormBuilder-FormFields-TextField-LIVE");
// });
// it(`Should use the descriptionStyle object in the globalFieldStyle prop to determine the style to use for the form fields`, () => {
// render();
// const checkDescriptionStyle = (type) => {
// const { data } = props;
// const description = data.filter((itm) => itm.type === type)[0][
// "description"
// ];
// expect(
// styleClean(screen.getByText(description).getAttribute("style"))
// ).toContain(styleClean(reactToCSS(styleData.descriptionStyle)));
// };
// // Checkboxes
// checkDescriptionStyle(FormFieldTypes.CHECKBOXES);
// // DateField
// checkDescriptionStyle(FormFieldTypes.DATE);
// // DropdownField
// checkDescriptionStyle(FormFieldTypes.DROPDOWN);
// // FileUpload
// checkDescriptionStyle(FormFieldTypes.FILEUPLOAD);
// // LinearScaleField
// checkDescriptionStyle(FormFieldTypes.LINEARSCALE);
// // MultipleChoice
// checkDescriptionStyle(FormFieldTypes.MULTIPLECHOICE);
// // TextAreaField
// checkDescriptionStyle(FormFieldTypes.TEXTAREA);
// // TextField
// checkDescriptionStyle(FormFieldTypes.TEXT);
// });
// it(`Should use the containerStyle object in the globalFieldStyle prop to determine the style to use for the form fields`, () => {
// render();
// const checkContainerStyle = (testId) => {
// expect(
// styleClean(screen.queryAllByTestId(testId)[0].getAttribute("style"))
// ).toContain(styleClean(reactToCSS(styleData.containerStyle)));
// };
// // Checkboxes
// checkContainerStyle("FormBuilder-FormFields-Checkboxes");
// // DateField
// checkContainerStyle("FormBuilder-FormFields-DateField");
// // DropdownField
// checkContainerStyle("FormBuilder-FormFields-DropdownField");
// // FileUpload
// checkContainerStyle("FormBuilder-FormFields-FileUpload");
// // LinearScaleField
// checkContainerStyle("FormBuilder-FormFields-LinearScaleField");
// // MultipleChoice
// checkContainerStyle("FormBuilder-FormFields-MultipleChoice");
// // TextAreaField
// checkContainerStyle("FormBuilder-FormFields-TextAreaField");
// // TextField
// checkContainerStyle("FormBuilder-FormFields-TextField");
// });
// });
describe(" Event Tests", () => {
test.todo(
`Should trigger the "onChange" event when one of the fields change`
);
test.todo(
`Should trigger the "onBlur" event when one of the fields triggers a blur event`
);
});