import { act, render, screen } from '@testing-library/react' import userEvent from '@testing-library/user-event' import { describe, expect, it, vi } from 'vitest' import Slider from './index' describe('Slider Component', () => { it('should render with correct default ARIA limits and current value', () => { render() const slider = screen.getByRole('slider') expect(slider).toHaveAttribute('aria-valuemin', '0') expect(slider).toHaveAttribute('aria-valuemax', '100') expect(slider).toHaveAttribute('aria-valuenow', '50') }) it('should apply custom min, max, and step values', () => { render() const slider = screen.getByRole('slider') expect(slider).toHaveAttribute('aria-valuemin', '5') expect(slider).toHaveAttribute('aria-valuemax', '20') expect(slider).toHaveAttribute('aria-valuenow', '10') }) it('should default to 0 if the value prop is NaN', () => { render() const slider = screen.getByRole('slider') expect(slider).toHaveAttribute('aria-valuenow', '0') }) it('should call onChange when arrow keys are pressed', async () => { const user = userEvent.setup() const onChange = vi.fn() render() const slider = screen.getByRole('slider') await act(async () => { slider.focus() await user.keyboard('{ArrowRight}') }) expect(onChange).toHaveBeenCalledTimes(1) expect(onChange).toHaveBeenCalledWith(21, 0) }) it('should not trigger onChange when disabled', async () => { const user = userEvent.setup() const onChange = vi.fn() render() const slider = screen.getByRole('slider') expect(slider).toHaveAttribute('aria-disabled', 'true') await act(async () => { slider.focus() await user.keyboard('{ArrowRight}') }) expect(onChange).not.toHaveBeenCalled() }) it('should apply custom class names', () => { render( , ) const sliderWrapper = screen.getByRole('slider').closest('.outer-test') expect(sliderWrapper).toBeInTheDocument() const thumb = screen.getByRole('slider') expect(thumb).toHaveClass('thumb-test') }) })