import * as React from "react"; import { renderIntoDocument, render, cleanup, fireEvent, wait, Simulate, } from "react-testing-library"; import { elementsArray } from "./utils"; import { getRadioItems } from "./utils/radioGroup"; import RadioButton, { mergeStyles } from "../components/RadioGroup"; import * as DefaultStyles from "../components/RadioGroup/style"; import { shallow } from "enzyme"; describe("radio input", () => { test("01 - renders radio inputs", () => { const items = getRadioItems(); const clicked = jest.fn(); const { container } = renderIntoDocument( ); const inputs = elementsArray(container, "input").map(c => c.getAttribute("type") ); expect(inputs.every(t => t === "radio")).toBe(true); }); test("02 - renders labels with names", () => { const items = getRadioItems(); const clicked = jest.fn(); const { container } = render( ); const labels = elementsArray(container, "label"); expect( labels.every((l, idx) => l.textContent === items[idx].name) ).toBe(true); }); test("03 - selected button changes with props", () => { const items = getRadioItems(); const clicked = jest.fn(); const { container, rerender } = render( ); const defaultInputs = elementsArray(container, "input"); expect(defaultInputs[0].checked).toBe(true); rerender( ); const inputs = elementsArray(container, "input"); expect(inputs[3].checked).toBe(true); }); test("04 - matches snapshot", () => { const items = getRadioItems(true); const clicked = jest.fn(); const { container } = render( ); expect(container).toMatchSnapshot(); }); test("05 - matches enzyme snapshot", () => { const items = getRadioItems(true); const clicked = jest.fn(); const { container } = render( ); expect(container).toMatchSnapshot(); }); test("05 - on radio button change prop called when inputs are changed", async () => { const items = getRadioItems(); const clicked = jest.fn(); const { getByLabelText } = render( ); Simulate.change(getByLabelText(items[0].name)); expect(clicked).toHaveBeenCalledWith(items[0]); expect(clicked).toHaveBeenCalledTimes(1); Simulate.change(getByLabelText(items[1].name)); expect(clicked).toHaveBeenCalledTimes(2); Simulate.change(getByLabelText(items[2].name)); expect(clicked).toHaveBeenCalledTimes(3); Simulate.change(getByLabelText(items[3].name)); expect(clicked).toHaveBeenCalledTimes(4); Simulate.change(getByLabelText(items[4].name)); expect(clicked).toHaveBeenCalledTimes(5); }); }); describe("merge styles", () => { test("01 - styles undefined leaves default styles", () => { expect(mergeStyles(DefaultStyles)).toEqual(DefaultStyles); }); });