import React from "react"; import { fireEvent, render, waitFor } from "@testing-library/react-native"; import { FormProvider, useForm } from "react-hook-form"; import { Button } from "react-native"; import { Checkbox } from "./Checkbox"; const accessibilityLabel = "testA11y"; const onChange = jest.fn(); afterEach(() => jest.resetAllMocks()); describe("Checkbox", () => { it("renders checkbox label", () => { const label = "TestLabel"; const { getByLabelText } = render( , ); expect(getByLabelText(label)).toBeTruthy(); }); it("renders checkbox with defaultChecked set to true", () => { const { getByTestId, getByRole } = render( , ); expect(getByRole("checkbox").props.accessibilityState).toHaveProperty( "checked", true, ); expect(getByTestId("checkmark")).toBeDefined(); }); it("renders checkbox label with assistive text", () => { const label = "TestLabel"; const assistive = "TestAssistive"; const { getByLabelText, getByText } = render( , ); expect(getByLabelText(label)).toBeTruthy(); expect(getByText(assistive)).toBeTruthy(); }); it("will call onChange with true when pressed without default checked state set", () => { const { getByLabelText } = render( , ); const checkbox = getByLabelText(accessibilityLabel); fireEvent.press(checkbox); expect(onChange).toHaveBeenCalledWith(true); }); it("will call onChange with false when checked checkbox is pressed", () => { const { getByLabelText } = render( , ); const checkbox = getByLabelText(accessibilityLabel); fireEvent.press(checkbox); expect(onChange).toHaveBeenCalledWith(false); }); it("will call onChange with true when unchecked checkbox is pressed", () => { const { getByLabelText } = render( , ); const checkbox = getByLabelText(accessibilityLabel); fireEvent.press(checkbox); expect(onChange).toHaveBeenCalledWith(true); }); it("will not call onChange when disabled", () => { const { getByLabelText } = render( , ); const checkbox = getByLabelText(accessibilityLabel); fireEvent.press(checkbox); expect(onChange).not.toHaveBeenCalled(); }); it("can be set as indeterminate", () => { const { getByTestId } = render( , ); expect(getByTestId("minus2")).toBeDefined(); }); }); describe("Checkbox with FormProvider", () => { const mockOnSubmit = jest.fn(); const checkboxName = "testCheckbox"; const checkboxLabel = "Test Checkbox"; const saveButtonText = "Save"; function FormWithProvider({ defaultChecked, }: { readonly defaultChecked?: boolean; }) { const formMethods = useForm(); return (