import React from 'react'
import { render, screen, fireEvent } from '@testing-library/react'
import '@testing-library/jest-dom'
import { Slider } from './index'
// Mock the styles
jest.mock('./styles.scss', () => ({}))
// Mock Radix UI Slider
jest.mock('@radix-ui/react-slider', () => ({
Root: ({ children, onValueChange, ...props }: any) => (
onValueChange && onValueChange([parseInt(e.target.value)])
}
>
{children}
),
Track: ({ children }: any) => (
{children}
),
Range: () => ,
Thumb: () => ,
}))
describe('@joi/core/Slider', () => {
it('renders correctly with default props', () => {
render()
expect(screen.getByTestId('slider-root')).toBeInTheDocument()
expect(screen.getByTestId('slider-track')).toBeInTheDocument()
expect(screen.getByTestId('slider-range')).toBeInTheDocument()
expect(screen.getByTestId('slider-thumb')).toBeInTheDocument()
})
it('passes props correctly to SliderPrimitive.Root', () => {
const props = {
name: 'test-slider',
min: 0,
max: 100,
value: [50],
step: 1,
disabled: true,
}
render()
const sliderRoot = screen.getByTestId('slider-root')
expect(sliderRoot).toHaveAttribute('name', 'test-slider')
expect(sliderRoot).toHaveAttribute('min', '0')
expect(sliderRoot).toHaveAttribute('max', '100')
expect(sliderRoot).toHaveAttribute('value', '50')
expect(sliderRoot).toHaveAttribute('step', '1')
expect(sliderRoot).toHaveAttribute('disabled', '')
})
it('calls onValueChange when value changes', () => {
const onValueChange = jest.fn()
render()
const input = screen.getByTestId('slider-root').querySelector('input')
fireEvent.change(input!, { target: { value: '75' } })
expect(onValueChange).toHaveBeenCalledWith([75])
})
})