import { render, screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import React from "react"; import { afterEach, beforeEach, describe, expect, test, vi } from "vitest"; import { Radio, RadioGroup } from "."; const value1 = "My first value"; const label1 = "World's best radio label"; const value2 = "Life changing value"; const label2 = "Radio label of the year"; const Group = (props) => ( {label1} {label2} ); describe("Controlled RadioGroup", () => { const originalError = console.error; const mockError = vi.fn(); beforeEach(() => { console.error = mockError; }); afterEach(() => { console.error = originalError; }); test("doesnt console.error", () => { const { rerender } = render(); rerender(); expect(mockError).toHaveBeenCalledTimes(0); }); }); describe("Uncontrolled RadioGroup", () => { test("handles state correctly", async () => { const user = userEvent.setup(); render(); const input1 = screen.getByLabelText(label1) as HTMLInputElement; const input2 = screen.getByLabelText(label2) as HTMLInputElement; expect(input1.checked).toBe(false); expect(input2.checked).toBe(false); await user.click(screen.getByLabelText(label2)); expect(input1.checked).toBe(false); expect(input2.checked).toBe(true); }); test("handles defaultValue correctly", async () => { const user = userEvent.setup(); render(); const input1 = screen.getByLabelText(label1) as HTMLInputElement; const input2 = screen.getByLabelText(label2) as HTMLInputElement; expect(input1.checked).toBe(true); expect(input2.checked).toBe(false); await user.click(screen.getByLabelText(label2)); expect(input1.checked).toBe(false); expect(input2.checked).toBe(true); }); });