import userEvent from "@testing-library/user-event"; import React from "react"; import { render, screen } from "@testing-library/react"; import { FieldProps } from "../Field"; import { Checkbox, CheckboxGroup, CheckboxOnlyProps, } from ":/components/Forms/Checkbox/index"; const spyError = vi.spyOn(global.console, "error"); describe("", () => { afterAll(() => { spyError.mockRestore(); }); it("renders and can be checked", async () => { const user = userEvent.setup(); render(); const input: HTMLInputElement = screen.getByRole("checkbox", { name: "Agree", }); expect(input.checked).toEqual(false); await user.click(input); expect(input.checked).toEqual(true); }); it("renders with default value and can be unchecked", async () => { const user = userEvent.setup(); render(); const input: HTMLInputElement = screen.getByRole("checkbox", { name: "Agree", }); expect(input.checked).toEqual(true); await user.click(input); expect(input.checked).toEqual(false); }); it("renders with indeterminate state", async () => { render(); expect(document.querySelector("svg.indeterminate")).toBeInTheDocument(); }); it("renders disabled", async () => { render(); expect(screen.getByRole("checkbox", { name: "Agree" })).toBeDisabled(); // Click and expect the checkbox does not get checked const user = userEvent.setup(); const input: HTMLInputElement = screen.getByRole("checkbox", { name: "Agree", }); expect(input.checked).toEqual(false); await user.click(input); expect(input.checked).toEqual(false); }); it("renders with text", async () => { render(); expect(screen.getByText("Text")).toBeInTheDocument(); }); it("renders with state=success", async () => { render(); expect(screen.getByText("Success text")).toBeInTheDocument(); expect( document.querySelector(".c__field.c__field--success"), ).toBeInTheDocument(); }); it("renders with state=error", async () => { render(); expect(screen.getByText("Error text")).toBeInTheDocument(); expect( document.querySelector(".c__field.c__field--error"), ).toBeInTheDocument(); }); it("renders with group", async () => { render( , ); screen.getByRole("checkbox", { name: "Agree", }); screen.getByRole("checkbox", { name: "Disagree", }); }); it("renders with group text", async () => { render( , ); expect(screen.getByText("Text")).toBeInTheDocument(); }); it("renders with group state=success", async () => { render( , ); expect(screen.getByText("Success text")).toBeInTheDocument(); expect( document.querySelector(".c__checkbox__group.c__field.c__field--success"), ).toBeInTheDocument(); }); it("renders with group state=error", async () => { render( , ); expect(screen.getByText("Error text")).toBeInTheDocument(); expect( document.querySelector(".c__checkbox__group.c__field.c__field--error"), ).toBeInTheDocument(); }); it("checks the props doesn't create error warning", async () => { const propsInput: Required = { label: "First name", fullWidth: true, className: "c__field--full-width", compact: false, state: "default", text: "my text", textItems: ["my text item 1", "my text item 2"], rightText: "my right text", indeterminate: true, }; render(); expect(spyError).not.toHaveBeenCalled(); }); });