import { Formio } from "@formio/js"; import { render, screen } from "@testing-library/react"; import { iconClass } from "../../../utils/iconClass"; import { FormControl } from "./FormControl"; import { Sandbox } from "./FormControl.stories"; Formio.setProjectUrl("https://api.form.io"); describe("form-control", () => { it("should display form control component", () => { render(); const formGroup = screen.getByTestId("form-group-test") as HTMLFormElement; expect(formGroup).toBeInTheDocument(); }); it("should NOT display form-control component without a name attribute defined", () => { const name = ""; render(); const formGroup = screen.queryByTestId(`form-group-${name}`) as HTMLFormElement; expect(formGroup).not.toBeInTheDocument(); }); it("should display form-control component with className 'field-required' when the props 'required' is set to true", () => { render(); const formGroup = screen.getByTestId("form-group-test") as HTMLFormElement; const formControlLabel = screen.getByTestId(`form-control-label`) as HTMLLabelElement; expect(formGroup).toBeInTheDocument(); expect(formControlLabel).toBeInTheDocument(); expect(formControlLabel).toHaveClass("col-form-label field-required"); }); it("should display prefix", () => { const fontAwsomeCalendarIcon = "bi bi-calendar"; const prefix = () as JSX.Element; render(); const formGroup = screen.getByTestId("form-group-testPrefix") as HTMLFormElement; const formControlPrefix = screen.getByTestId("form-control-prefix") as HTMLSpanElement; expect(formGroup).toBeInTheDocument(); expect(formControlPrefix).toBeInTheDocument(); expect(formControlPrefix).not.toBeEmptyDOMElement(); expect(formControlPrefix).toContainHTML(fontAwsomeCalendarIcon); }); it("should display suffix", () => { const fontAwsomeCalendarIcon = "bi bi-calendar"; const suffix = () as JSX.Element; render(); const formGroup = screen.getByTestId("form-group-testSuffix") as HTMLFormElement; const formControlSuffix = screen.getByTestId("form-control-suffix") as HTMLSpanElement; expect(formGroup).toBeInTheDocument(); expect(formControlSuffix).toBeInTheDocument(); expect(formControlSuffix).not.toBeEmptyDOMElement(); expect(formControlSuffix).toContainHTML(fontAwsomeCalendarIcon); }); it("should display description", () => { const description = "test description"; render(); const formGroup = screen.getByTestId("form-group-testDescription") as HTMLFormElement; const formControlDescription = screen.getByTestId("form-control-description") as HTMLDivElement; expect(formGroup).toBeInTheDocument(); expect(formControlDescription).toBeInTheDocument(); expect(formControlDescription).not.toBeEmptyDOMElement(); expect(screen.getByText(description)).toBeInTheDocument(); }); });