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