import React from "react";
import { fireEvent, render } from "@testing-library/react-native";
import { BaseSwitch } from "./BaseSwitch";
describe("BaseSwitch", () => {
describe("rendering", () => {
it("renders with value true", () => {
const { getByRole } = render();
const switchElement = getByRole("switch");
expect(switchElement).toBeDefined();
expect(switchElement.props.accessibilityState.checked).toBe(true);
});
it("renders with defaultValue true", () => {
const { getByRole } = render();
const switchElement = getByRole("switch");
expect(switchElement).toBeDefined();
expect(switchElement.props.accessibilityState.checked).toBe(true);
});
it("renders with value false", () => {
const { getByRole } = render();
const switchElement = getByRole("switch");
expect(switchElement).toBeDefined();
expect(switchElement.props.accessibilityState.checked).toBe(false);
});
it("renders with defaultValue false", () => {
const { getByRole } = render();
const switchElement = getByRole("switch");
expect(switchElement).toBeDefined();
expect(switchElement.props.accessibilityState.checked).toBe(false);
});
it("renders correctly when disabled with value true", () => {
const { getByRole } = render();
const switchElement = getByRole("switch");
expect(switchElement).toBeDefined();
expect(switchElement.props.accessibilityState.checked).toBe(true);
expect(switchElement.props.accessibilityState.disabled).toBe(true);
});
it("renders correctly when disabled with value false", () => {
const { getByRole } = render(
,
);
const switchElement = getByRole("switch");
expect(switchElement).toBeDefined();
expect(switchElement.props.accessibilityState.checked).toBe(false);
expect(switchElement.props.accessibilityState.disabled).toBe(true);
});
});
describe("behavior", () => {
it("invokes the valueChange callback", () => {
const valueChangedCallback = jest.fn();
const { getByLabelText } = render(
,
);
fireEvent(getByLabelText("test switch"), "valueChange", true);
expect(valueChangedCallback).toHaveBeenCalledWith(true);
fireEvent(getByLabelText("test switch"), "valueChange", false);
expect(valueChangedCallback).toHaveBeenCalledWith(false);
});
it("doesn't invoke the valueChange callback if disabled", () => {
const valueChangedCallback = jest.fn();
const { getByLabelText } = render(
,
);
fireEvent(getByLabelText("test switch"), "valueChange", true);
expect(valueChangedCallback).not.toHaveBeenCalled();
});
});
});