import { render, screen, fireEvent } from '@testing-library/react';
import { describe, it, expect } from 'vitest';
import { RadioGroup, RadioGroupItem } from './radio-group';
import React from 'react';
describe('RadioGroup', () => {
it('renders correctly', () => {
render(
);
expect(screen.getByLabelText('Option One')).toBeInTheDocument();
expect(screen.getByLabelText('Option Two')).toBeInTheDocument();
});
it('changes selection on click', () => {
const { container } = render(
);
const radioOne = container.querySelector('[value="option-one"]') as HTMLElement;
const radioTwo = container.querySelector('[value="option-two"]') as HTMLElement;
expect(radioOne).toHaveAttribute('data-state', 'checked');
expect(radioTwo).toHaveAttribute('data-state', 'unchecked');
fireEvent.click(radioTwo);
expect(radioOne).toHaveAttribute('data-state', 'unchecked');
expect(radioTwo).toHaveAttribute('data-state', 'checked');
});
it('has correct data-slot attributes', () => {
const { container } = render(
);
expect(container.querySelector('[data-slot="radio-group-item"]')).toBeInTheDocument();
// Indicator only renders for the checked item
expect(container.querySelector('[data-slot="radio-group-indicator"]')).toBeInTheDocument();
});
it('renders correctly with different sizes', () => {
const { rerender } = render(
);
expect(screen.getByRole('radio')).toHaveClass('size-4');
rerender(
);
expect(screen.getByRole('radio')).toHaveClass('size-5');
rerender(
);
expect(screen.getByRole('radio')).toHaveClass('size-6');
});
});