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);
});
});